Предположим, у меня есть файл, подобный следующему:
123
123
234
234
123
345
Я хотел бы выяснить, сколько раз дублировалось значение «123», сколько раз дублировалось значение «234» и т. Д. Поэтому в идеале вывод должен выглядеть следующим образом:
123 3
234 2
345 1
Ответы:
Предполагая, что есть одна цифра в строке:
Вы также можете использовать более подробный
--count
флаг с версией GNU, например, в Linux:источник
sort
снова, как:sort <file> | uniq -c | sort -n
Это будет печатать только дубликаты строк с количеством:
или с длинными параметрами GNU (в Linux):
в BSD и OSX вы должны использовать grep для фильтрации уникальных строк:
Для данного примера результатом будет:
Если вы хотите напечатать счетчики для всех строк, включая те, которые появляются только один раз:
или с длинными параметрами GNU (в Linux):
Для данного входа, выход:
Чтобы отсортировать вывод с наиболее часто встречающимися строками вверху, вы можете сделать следующее (чтобы получить все результаты):
или, чтобы получить только повторяющиеся строки, чаще всего сначала:
на OSX и BSD финальным становится:
источник
| sort -n
или| sort -nr
в трубу вывод сортируется по количеству повторений (по возрастанию или по убыванию соответственно). Это не то, что вы спрашиваете, но я подумал, что это может помочь.| awk '$1>100'
sort FILE | uniq -c | grep -v '^ *1 '
Чтобы найти и сосчитать повторяющиеся строки в нескольких файлах, вы можете попробовать следующую команду:
или:
источник
Через AWK:
В
awk 'dups[$1]++'
команде переменная$1
содержит все содержимое column1, а квадратные скобки - доступ к массиву. Таким образом, для каждого 1-го столбца строки вdata
файле узел названного массиваdups
увеличивается.И, наконец , мы перебираем
dups
массив сnum
переменной as и печатаем сначала сохраненные числа, а затем их количество дублированных значенийdups[num]
.Обратите внимание, что у вашего входного файла есть пробелы в конце некоторых строк, если вы очистите их, вы можете использовать
$0
вместо$1
команды выше :)источник
uniq
?sort | uniq
и у решения awk совсем другой компромисс между производительностью и ресурсами: если файлы большие, а количество разных строк невелико, решение awk намного эффективнее. Он линейный по количеству строк, а использование пространства линейно по количеству разных строк. OTOH, решение awk должно хранить все различные строки в памяти, в то время как сортировка (GNU) может использовать временные файлы.В Windows, используя Windows PowerShell, я использовал команду, указанную ниже, чтобы добиться этого
Также мы можем использовать командлет where-object для фильтрации результатов
источник
Предполагая, что у вас есть доступ к стандартной оболочке Unix и / или среде cygwin:
В основном: конвертируйте все пробелы в разрывы строк, затем сортируйте транслированные выходные данные и передавайте их в uniq и подсчитывайте повторяющиеся строки.
источник