UnixとAwkを使用して列に基づいてファイルを並べ替える

UnixとAwkを使用して列に基づいてファイルを並べ替える

スコアの6番目の列に基づいて入力ファイルをソートする必要があります。

入力ファイル:

Sc2/80  20 . A T 86 Pass N=2 F=5;U=4
Sc2/80  20 . A C 80 Pass N=2 F=5;U=4
Sc2/60  55 . G T 90 Pass N=2 F=5;U=4
Sc2/60  55 . G C 99 Pass N=2 F=5;U=4
Sc2/20  39 . C T 97 Pass N=2 F=5;U=4
Sc2/20  39 . C A 99 Pass N=2 F=5;U=4

予想出力:

Sc2/20 39 . C T 97 Pass N=2 F=5;U=4
Sc2/20 39 . C A 99 Pass N=2 F=5;U=4
Sc2/60 55 . G T 90 Pass N=2 F=5;U=4
Sc2/60 55 . G C 99 Pass N=2 F=5;U=4
Sc2/80 20 . A T 86 Pass N=2 F=5;U=4
Sc2/80 20 . A C 80 Pass N=2 F=5;U=4

ロジック:入力ファイル内の偶数行をすべて比較し、スコア(降順)で並べ替え、ファイル内の対応する奇数行を印刷します。ランダムな(偶数行)スコアが同じ場合、その奇数行のスコアを確認する必要があるため、より高いスコアが優先的に適用され、最初に印刷されます。

ベストアンサー1

考えられる解決策の1つは、両方の行をまとめてソートしてから、リンクされた行を再分割することです。

awk '{ getline line; print $0, line }' input_file | 
    sort -k6,6nr -k15,15nr | 
    awk '{ $10 = "\n" $10; print }'

おすすめ記事