Найдите повторяющиеся строки в файле и подсчитайте, сколько раз каждая строка была дублирована?
Предположим, у меня есть файл, подобные следующим:
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 и подсчитайте повторяющиеся строки.