Shell Script для удаления повторяющихся записей из файла - PullRequest
2 голосов
/ 03 февраля 2012

Я хотел бы удалить повторяющиеся записи из файла.Файл выглядит следующим образом:

xyabcd1:5!b4RlH/IgYzI:cvsabc
xyabcd2:JXfFZCZrL.6HY:cvsabc
xyabcd3:mE7YHNejLCviM:cvsabc
xyabcd1:5!b4RlH/IgYzI:cvsabc
xyabcd4:kQiRgQTU20Y0I:cvsabc
xyabcd2:JXfFZCZrL.6HY:cvsabc
xyabcd1:5!b4RlH/IgYzI:cvsabc
xyabcd2:JXfFZCZrL.6HY:cvsabc
xyabcd4:kQiRgQTU20Y0I:cvsabc
xyabcd2:JXfFZCZrL.6HY:cvsabc

Как удалить дубликаты из этого файла с помощью сценария оболочки?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Из справочной страницы сортировки:

-u, --unique с -c проверить строгий порядок; без -c вывести только первое из одинакового прогона

sort -u yourFile

должен сделать.

2 голосов
/ 03 февраля 2012

Если вы не хотите изменять порядок входного файла, вы можете сделать:

$ awk '!v[$0]{ print; v[$0]=1 }' input-file

или, если файл достаточно мал (менее 4 миллиардов строк, чтобы ни одна строка не повторялась 4 миллиарда раз), вы можете сделать:

$ awk '!v[$0]++' input-file

В зависимости от реализации awk вам может не понадобиться беспокоиться о том, что файл имеет длину менее 2 ^ 32 строк. Проблема заключается в том, что если вы видите одну и ту же строку 2 ^ 32 раза, вы можете переполнить целое число в значении массива, и 2 ^ 32-й экземпляр (или 2 ^ 31-я) дублирующейся строки будет выведен во второй раз. На самом деле это вряд ли проблема!

...