Ответ 1
Предполагая, что в строке есть одно число:
sort <file> | uniq -c
Вы можете использовать более подробный флаг --count
также с версией GNU, например, в Linux:
sort <file> | uniq --count
Предположим, что у меня есть файл, похожий на следующий:
123
123
234
234
123
345
Я хотел бы найти, сколько раз "123" было дублировано, сколько раз "234" было дублировано и т.д. Поэтому в идеале вывод будет выглядеть следующим образом:
123 3
234 2
345 1
Предполагая, что в строке есть одно число:
sort <file> | uniq -c
Вы можете использовать более подробный флаг --count
также с версией GNU, например, в Linux:
sort <file> | uniq --count
Это будет печатать только повторяющиеся строки, счетчики:
sort FILE | uniq -cd
или с вариантами GNU long (в 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 long (в 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
Через awk:
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
В команде awk 'dups[$1]++'
переменная $1
содержит все содержимое столбца1, а квадратные скобки - это доступ к массиву. Итак, для каждого 1-го столбца строки в файле data
node массива с именем dups
увеличивается.
И в конце мы перебираем массив dups
с переменной num
в качестве переменной и сначала печатаем сохраненные номера, а затем их количество дублирующихся значений на dups[num]
.
Обратите внимание, что ваш входной файл имеет пробелы в конце некоторых строк, если вы очистите их, вы можете использовать $0
вместо $1
в команде выше:)
Предполагая, что у вас есть доступ к стандартной оболочке Unix и/или среде cygwin:
tr -s ' ' '\n' < yourfile | sort | uniq -d -c
^--space char
В основном: преобразовать все пробельные символы в строки, а затем отсортировать транслированный вывод и фид, чтобы uniq и подсчитать повторяющиеся строки.
В окнах с использованием "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