Linuxコマンドを使用した2つの列に基づいたデータのフィルタリング

Linuxコマンドを使用した2つの列に基づいたデータのフィルタリング

22列の* .pslファイルがあります。 10列と22列に基づいてすべての行を抽出したいと思います。したがって、一部の行には列10に複数の共通読み取りがあり、列22に高いスコアを持つ特定の読み取りのスコアがあるため、その行を印刷してから、新しい出力からファイルから残りの読み取りを削除するだけです。

98  1   0   0   0   0   0   0   +   7efcc799-5806-477b-8145-fb13d90fcdb4    466 151 250 hsa_circ_0005880    100 0   99  1   99, 151,    0,  99
98  1   0   0   0   0   0   0   +   7efcc799-5806-477b-8145-fb13d90fcdb4    466 151 250 hsa_circ_0005724    100 0   99  1   99, 151,    0,  99
98  1   0   0   0   0   0   0   +   7efcc799-5806-477b-8145-fb13d90fcdb4    466 151 250 hsa_circ_0005173    100 0   99  1   99, 151,    0,  99
97  1   0   0   0   0   0   0   +   7efcc799-5806-477b-8145-fb13d90fcdb4    466 152 250 hsa_circ_0004932    100 0   98  1   98, 152,    0,  98
94  0   0   0   1   3   2   6   +   4c415d86-0c12-4b07-ab19-0d7fcbe8b1c7    334 220 317 hsa_circ_0001006    100 0   100 3   18,25,51,   220,238,266,    0,19,49,    94
83  3   0   0   2   5   3   10  +   a28de8d0-e08b-43b5-9de2-07df4404ea8c    332 35  126 hsa_circ_0037060    100 4   100 5   7,18,43,3,15,   35,43,65,108,111,   4,11,36,81,85,  86
71  3   0   0   0   0   1   1   -   2116d815-5edb-4124-998b-398be6161c56    490 184 258 hsa_circ_0001592    100 1   76  2   34,40,  232,266,    1,36,   74

だから私はこのような出力が欲しいです。ここでは、他の同様の読み取りスコアよりもスコアが低い私のファイルから行が削除されたことを確認できます。

98  1   0   0   0   0   0   0   +   7efcc799-5806-477b-8145-fb13d90fcdb4    466 151 250 hsa_circ_0005880    100 0   99  1   99, 151,    0,  99
98  1   0   0   0   0   0   0   +   7efcc799-5806-477b-8145-fb13d90fcdb4    466 151 250 hsa_circ_0005724    100 0   99  1   99, 151,    0,  99
98  1   0   0   0   0   0   0   +   7efcc799-5806-477b-8145-fb13d90fcdb4    466 151 250 hsa_circ_0005173    100 0   99  1   99, 151,    0,  99
94  0   0   0   1   3   2   6   +   4c415d86-0c12-4b07-ab19-0d7fcbe8b1c7    334 220 317 hsa_circ_0001006    100 0   100 3   18,25,51,   220,238,266,    0,19,49,    94
83  3   0   0   2   5   3   10  +   a28de8d0-e08b-43b5-9de2-07df4404ea8c    332 35  126 hsa_circ_0037060    100 4   100 5   7,18,43,3,15,   35,43,65,108,111,   4,11,36,81,85,  86
71  3   0   0   0   0   1   1   -   2116d815-5edb-4124-998b-398be6161c56    490 184 258 hsa_circ_0001592    100 1   76  2   34,40,  232,266,    1,36,   74

検索しましたが、同様の質問が見つかりませんでした。それでは、この問題を解決する方法を教えてください。アドバイスありがとうございます。

ベストアンサー1

awk入力ファイルの使用と処理二重、一度は同じ列の最高値である10を探し、2番目は私たちが見つけた最も高い値を持つレコードを印刷します。

awk 'NR==FNR{ max[$10]=(max[$10]>$NF? max[$10]:$NF); next } 
     max[$10]==$NF' infile infile

おすすめ記事