次のデータフレームの例があります。 3番目の列の要素を繰り返すことができます。 5列に最も高い値を持つ項目を維持したいと思います。
~の意味AGCCCGGGG2番目の項目である5番目の列の値が49であることを維持したいと思います。
A00643:620:HFM7YDSX5:1:1124:7120:12352 ATCAGCCCGGGGCTTGGGCTAGGAC GGGTGTGTG 548476 0 Corynebacterium
A00643:620:HFM7YDSX5:1:1150:15953:12524 CCTATCGTCGCTGGAATTCCCCGGG AGCCCGGGG 1458266 1 Bordetella
A00643:620:HFM7YDSX5:1:1150:15628:12743 CCTATCGTCGCTGGAATTCCCCGGG AGCCCGGGG 1458266 49 Bordetella
A00643:620:HFM7YDSX5:1:1450:4001:4507 GGCGATCGAAATGTCAAGCCCGGGG TCTTGTGGT 585529 0 Corynebacterium
A00643:620:HFM7YDSX5:1:2124:8865:2472 ATCAGCCCGGGGCTTGGGCTAGGAC GGGTGTGTG 548476 0 Corynebacterium
A00643:620:HFM7YDSX5:1:2476:4001:29496 ATTCACCCTATAGGAGCCCGGGGCA TGCCCCGGG 1458266 0 Bordetella
ベストアンサー1
awk
便利なツールは次のとおりです。
awk -F'\t' 'l[$3] {if ($5>n[$3]) {n[$3]=$5; l[$3]=$0} ; next}
{n[$3]=$5 ; l[$3]=$0}
END { for (i in l) {print l[i]}}' infile
-F'\t'
- タブ文字をフィールド区切り文字として使用
2行目から始めましょう。n[$3]=$5
列 5 の数字を列 3 で索引付けされた配列に保存しn
、行全体をl
同じ索引で索引付けされた配列に保存します。ただし、これは次の理由で列3に固有の値が最初に表示されたときにのみ発生します。
l[$3] {...}
l
中括弧で囲まれたコマンドは、インデックス(= 3列)の要素が配列$3
にある場合にのみ実行されます。この場合、保存された値はn
列5と比較され、必要に応じて更新されます。next
方法次のレコードに移動つまり、ファイルの行です。
END
- 配列を繰り返しl
、$3
一意で(最初の)最も高い値を持つすべての行を返します$5
。元のファイルの順序は `いいえ維持する。