仅根据一个字段查找唯一的行

时间:2016-09-21 09:47:37

标签: bash sorting unique uniq

是否有一种简单的方法可以在文件中找到唯一的行(也许是uniq的开关?),但只考虑特定的字符串/字段?

例如,给出以下内容:

1-3172  gi|493665175|dbj|AP012055.1|    100.000 136 0   0   115 250 64464   64329   6.78e-62    246
1-3172  gi|493665175|dbj|AP012055.1|    100.000 97  0   0   115 211 27885   27789   1.01e-40    176
1-3172  gi|500229602|gb|KC619528.1| 100.000 136 0   0   115 250 14268   14403   6.78e-62    246
1-3172  gi|514883433|gb|JX127248.1| 100.000 136 0   0   115 250 97570   97435   6.78e-62    246
1-3172  gi|514883433|gb|JX127248.1| 100.000 96  0   0   115 210 104503  104598  3.52e-40    174
1-3172  gi|514883433|gb|JX127248.1| 100.000 96  0   0   115 210 151929  151834  3.52e-40    174
1-3172  gi|514883433|gb|JX127248.1| 100.000 96  0   0   115 210 68038   67943   3.52e-40    174
1-3172  gi|514883433|gb|JX127248.1| 100.000 97  0   0   115 211 136361  136457  1.01e-40    176
1-3172  gi|514995431|gb|KC795685.1| 100.000 136 0   0   115 250 2358    2493    6.78e-62    246
1-3172  gi|514995435|gb|KC795686.1| 100.000 136 0   0   115 250 2358    2493    6.78e-62    246

我想在第二列中保留所有具有唯一gi值的行(这是以btw分隔的标签符号)。

我实现了我想要的目标:

$ head pnf_blastout95.txt | sort -k 2 | cut -f 2-3 | uniq -u

gi|500229602|gb|KC619528.1| 100.000
gi|514995431|gb|KC795685.1| 100.000
gi|514995435|gb|KC795686.1| 100.000

但是我想把整条线放在一个理想的世界里?如果没有剪切,uniq会认为它们是唯一的,因为在行尾有分数和其他信息。

以上只是head对这些文件的输出。实际文件大小为15GB(!!!)(其中一个是191494301行 - 因此我想将它减少到唯一匹配),所以无论解决方案如何,我都可以尽可能快地完成它。

0 个答案:

没有答案