借助linux命令根据两列过滤数据

借助linux命令根据两列过滤数据

我有一个 *.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

相关内容