Удалить все вхождения дубликата строки - PullRequest
4 голосов
/ 09 февраля 2011

Если я хочу удалить строки, в которых дублируются определенные поля, тогда я использую сортировку -u -kn, n.Но это сохраняет один случай.Если я хочу удалить все вхождения дубликата, есть ли быстрый способ bash или awk для этого?

Например, у меня есть:

1   apple   30
2   banana   21
3   apple   9
4   mango   2

Я хочу:

2 banana   21
4 mango   2

Я предварительно отсортирую, а затем использую хеш в perl, но для больших файлов это будет медленно.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

Это сохранит ваш вывод в том же порядке, что и ваш ввод:

awk '{seen[$2]++; a[++count]=$0; key[count]=$2} END {for (i=1;i<=count;i++) if (seen[key[i]] == 1) print a[i]}' inputfile
2 голосов
/ 09 февраля 2011

Попробуйте sort -k <your fields> | awk '{print $3, $1, $2}' | uniq -f2 -u | awk '{print $2, $3, $1}' удалить все дублирующиеся строки (без сохранения копий).Если вам не нужно последнее поле, измените эту первую команду awk на cut -f 1-5 -d ' ', измените -f2 в uniq на -f1 и удалите вторую команду awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...