Найдите повторяющиеся строки в файле и подсчитайте, сколько раз каждая строка была дублирована?

Предположим, у меня есть файл, подобные следующим:

123 
123 
234 
234 
123 
345

Я хотел бы узнать, сколько раз " 123 "было продублировано, сколько раз" 234 " было продублировано и т. д. Так что в идеале выход будет выглядеть так:

123  3 
234  2 
345  1

7 ответов


предполагая, что есть одно число в строке:

sort <file> | uniq -c

вы можете использовать более подробном --count флаг тоже с версией GNU, например, на Linux:

sort <file> | uniq --count

это печатать только повторяющиеся строки, С пунктам:

sort FILE | uniq -cd

или с длинными опциями GNU (в Linux):

sort FILE | uniq --count --repeated

on BSD и OSX вы должны использовать grep чтобы отфильтровать уникальные строки:

sort FILE | uniq -c | grep -v '^ *1 '

для данного примера результатом будет:

  3 123
  2 234

если вы хотите количество печати для всех строк включая те, которые появляются только после:

sort FILE | uniq -c

или с длинными опциями GNU (в Linux):

sort FILE | uniq --count

для данного входа выход:

  3 123
  2 234
  1 345

для того чтобы сортировка выходных данных С наиболее частыми линиями сверху вы можете сделать следующее (Чтобы получить все результаты):

sort FILE | uniq -c | sort -nr

или, чтобы получить только повторяющиеся строки, чаще всего сначала:

sort FILE | uniq -cd | sort -nr

на OSX и BSD последним становится:

sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr

чтобы найти и подсчитать повторяющиеся строки в нескольких файлах, вы можете попробовать следующую команду:

sort <files> | uniq -c | sort -nr

или:

cat <files> | sort | uniq -c | sort -nr

Via на awk:

awk '{dups[]++} END{for (num in dups) {print num,dups[num]}}' data

на переменная содержит все содержимое column1, а квадратные скобки-доступ к массиву. Таким образом, для каждого 1-го столбца строки data file, узел массива с именем dups увеличивается.

и в конце концов, мы обходишь dups массив num как переменная и распечатать сохраненный цифры во-первых, затем их количество дублированных значений по dups[num].

обратите внимание, что входной файл имеет пробелы в конце строки, Если вы как, вы можете использовать на месте в командной выше :)


в windows с помощью "Windows PowerShell" я использовал команду, упомянутую ниже, чтобы достичь этого

Get-Content .\file.txt | Group-Object | Select Name, Count

Также мы можем использовать командлет where-object для фильтрации результата

Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count

предполагая, что у вас есть доступ к стандартной оболочке Unix и / или среде cygwin:

tr -s ' ' '\n' < yourfile | sort | uniq -d -c
       ^--space char

в основном: преобразуйте все символы пробела в linebreaks, затем отсортируйте вывод tranlsated и передайте его в uniq и подсчитайте повторяющиеся строки.


Если кто-то ищет онлайн-сайт, который выполняет аналогичную работу:

http://www.kennistranslations.com/wordcount