7

私はこのファイルを持っています:

rs1    1    ADD     0.7     0.75     0.45
rs1    1    VAR     0.4     4.53     0.06
rs1    1    USER    NA      1.96     0.37
rs2    2    ADD     1.5     0.25     0.23
rs2    2    VAR     0.4     4.86     0.03
rs2    2    USER    NA      1.73     0.05
rs3    3    ADD     0.29    0.76     0.97
rs3    3    VAR     0.44    3.95     0.09
rs3    3    USER    0.96    5.41     0.01

の各値に対して、 、、in の$13 行があります。inの行の値に基づいてファイルをソート (逆ソート) したい。問題は、これを行うと同時に、対応する行を , ソートされた行の隣に保持する方法です。他の 2 行を並べ替える必要はありません。私は彼らが線の隣にいることを必要としています。ADDVARUSER$3$6USER$3ADDVARsorted

望ましい出力:

 rs3    3    ADD     0.29    0.76    0.97
 rs3    3    VAR     0.44    3.95    0.09
 rs3    3    USER    0.96    5.41    0.01
 rs2    2    ADD     1.5     0.25    0.23
 rs2    2    VAR     0.4     4.86    0.03
 rs2    2    USER    NA      1.73    0.05
 rs1    1    ADD     0.7     0.75    0.45
 rs1    1    VAR     0.4     4.53    0.06
 rs1    1    USER    NA      1.96    0.37

$6このコードを試してみましたが、行の値に基づいてのみソートされUSERます:

cat File | sort -k1 | uniq | sort -g -k6 > Output

ありがとうございました

4

2 に答える 2

5

これは少し面倒ですが、あなたが望むことをします:

paste - - - < File | sort -k18,18g | xargs -n 6

入力形式の問題は、並べ替えでは入力行のグループを操作する方法がないため、各グループを 1 行にまとめ、並べ替えてから元に戻す必要があることです。これは、入力「USER」行が常にグループの最後にある場合にのみ機能します。

于 2013-09-11T00:08:31.820 に答える