$ cat data.txt
aaaaaa
aaaaaa
cccccc
aaaaaa
aaaaaa
bbbbbb
$ cat data.txt | uniq
aaaaaa
cccccc
aaaaaa
bbbbbb
$ cat data.txt | sort | uniq
aaaaaa
bbbbbb
cccccc
$
В результате мне нужно отобразить все строки исходного файла, удалив все дубликаты (не только последовательные), сохранив при этом исходный порядок операторов в файле .
Здесь, в этом примере, результат, который я на самом деле искал, был
aaaaaa
cccccc
bbbbbb
Как я могу выполнить эту обобщенную uniq
операцию в целом?
text-processing
uniq
Lazer
источник
источник
{ if (!seen[$0]++) print }
if
,print
, скобки и фигурные скобки:awk '!seen[$0]++'
'!LarryWall[$0]++'
на все заботы, но «увиденное» помогает людям лучше понять программу.У Джона есть инструмент под названием
unique
:Добиться того же без дополнительных инструментов в одной командной строке немного сложнее:
nl
печатает номера строк перед строками, поэтому, если мыsort
/uniq
за ними, мы можем восстановить первоначальный порядок строк.sed
просто удаляет номера строк после этого;)источник
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2
Я предпочитаю использовать это:
cat -n
добавляет номера строк,sort --key=2.1 -b -u
сортирует по второму полю (после добавленных номеров строк), игнорируя начальные пробелы, сохраняя уникальные строкиsort -n
сортирует в строгом числовом порядкеcut -c8-
сохранить все символы от столбца 8 до EOL (т. е. пропустить добавленные номера строк)источник
В Perl есть модуль, который вы можете использовать и который включает функцию
uniq
. Поэтому, если вы сохраняете свои данные, загруженные в массив в Perl, вы просто вызываете функцию, подобную этой, чтобы сделать ее уникальной, но при этом сохранить первоначальный порядок.Вы можете прочитать больше об этом модуле здесь: Список :: MoreUtils
источник