Удаление дублирующихся строк в текстовом файле …?

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

Например: у Меня есть текстовый файл 10 МБ, и я хочу сохранить только одну строку My line, но где-нибудь в текстовом файле существуют 2 My lines.

7
задан 19 July 2017 в 20:43

3 ответа

Используя awk

awk '!x[$0]++' infile.txt > outfile.txt

путем это работает, то, что это проводит подсчет строк в массиве, и если текущее количество является нулем, т.е. первым происшествием, это печатает строку, иначе это продолжается к следующему.

14
ответ дан 23 November 2019 в 06:10

Существует несколько способов сделать это. Если упорядочивание не важно затем, вид и uniq является самым легким помнить. Однако, если Вы хотите поддержать упорядочивание текстового файла, все же удаляют дубликаты затем awk, добивается цели. Можно также использовать sed, которому я верю.

Вот пример

/tmp/debugSys>cat fileWithDupText.txt 
line2
line21
line2
line1
line2
/tmp/debugSys>

/tmp/debugSys>cat fileWithDupText.txt | awk '!a[$0]++' 
line2
line21
line1
/tmp/debugSys>sort fileWithDupText.txt | uniq
line1
line2
line21
/tmp/debugSys>sort -u fileWithDupText.txt 
line1
line2
line21
/tmp/debugSys>
7
ответ дан 23 November 2019 в 06:10

Найденный хорошей остротой Perl для этого, с помощью md5 хеши ;), но это медленно и только стоит того, если у Вас есть очень длинные строки и огромный файл, где это значительно уменьшит использование памяти:

perl -MDigest::MD5 -ne '$seen{Digest::MD5::md5($_)}++ or print' foo

Поэтому просто используйте

perl -ne '$seen{$_}++ or print' foo

Источник


Пример

cat foo

foo
fii
foo bar
foobar
foobar
foo

perl -ne '$seen{$_}++ or print' foo

foo
fii
foo bar
foobar
2
ответ дан 23 November 2019 в 06:10

Другие вопросы по тегам:

Похожие вопросы: