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