Есть ли команда unix, которая может проверить, совпадают ли какие-либо две строки в файле?
Например, рассмотрим файл sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
Мы видим, что предложение
This is sentence X
повторяется
Есть ли какая-нибудь команда, которая может быстро обнаружить это, так что я могу выполнить ее так:
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
text-processing
search
CodeBlue
источник
источник
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
будет немного более эффективным и позволит избежать потенциальныхarg list too long
проблем.Не совсем то, что вы хотите, но вы можете попробовать комбинировать
sort
иuniq -c -d
:2
вот количество найденных дубликатов для строкиman uniq
:источник
Если содержимое файла помещается в память,
awk
это хорошо. Стандартный однострочный файл в comp.lang.awk (я не могу искать экземпляр с этой машины, но есть несколько раз в месяц), чтобы просто обнаружить наличие дублирования,awk 'n[$0]++'
которое подсчитывает вхождения каждой строковой величины и печатает все вхождения кроме первого, потому что действие по умолчаниюprint $0
.Чтобы показать все вхождения, включая первое, в вашем формате, но, возможно, в смешанном порядке, когда более одного значения дублируется, становится немного более привередливым:
Для ясности, показанные в нескольких строках, вы обычно работаете вместе в реальном использовании. Если вы делаете это часто, вы можете поместить
awk
сценарий в файлawk -f
, или, конечно, целиком в сценарий оболочки. Как и большинство простых,awk
это может быть сделано очень похожеperl -n[a]
.источник