是否有一种简单的方法可以在文件中找到唯一的行(也许是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行 - 因此我想将它减少到唯一匹配),所以无论解决方案如何,我都可以尽可能快地完成它。