我有一个 *.psl 文件,其中有 22 列。我想根据第 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的最高值,第二次用于打印具有我们找到的最高值的记录:
awk 'NR==FNR{ max[$10]=(max[$10]>$NF? max[$10]:$NF); next }
max[$10]==$NF' infile infile