Есть ли простой способ найти уникальные строки в файле (возможно, переключатель для 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 во втором столбце (кстати, это табуляция).
Я вроде добился того, чего хочу:
$ 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
в эти файлы. Фактические файлы имеют размер 15 ГБ (!!!) (191494301 строк в одном из них - поэтому я хочу уменьшить его до уникальных совпадений), поэтому любое решение я мог бы сделать с ним как можно быстрее.
awk
может творить чудеса самостоятельно - person Inian   schedule 21.09.2016