Подсчет уникальных строк в файле — распространенная задача в Linux. В этой статье представлены два эффективных метода командной строки: использование sort
и uniq
, а также использование awk
.
Содержание
Подсчет уникальных строк с помощью sort
и uniq
Этот метод сочетает возможности sort
и uniq
для простого решения. sort
упорядочивает строки в алфавитном порядке, что является обязательным условием для uniq
, который считает только последовательные одинаковые строки. Опция -c
в uniq
добавляет префикс с количеством к каждой строке.
Для подсчета уникальных строк в файле file.txt
:
sort file.txt | uniq -c
Это отображает каждую уникальную строку с ее количеством. Чтобы получить общее количество уникальных строк, передайте вывод в wc -l
:
sort file.txt | uniq -c | wc -l
Пример:
Если file.txt
содержит:
apple
banana
apple
orange
banana
apple
sort file.txt | uniq -c
выведет:
3 apple
2 banana
1 orange
А sort file.txt | uniq -c | wc -l
выведет:
3
Подсчет уникальных строк с помощью awk
awk
предлагает гибкое решение, особенно полезное для более сложных сценариев. Этот метод использует ассоциативный массив для отслеживания уникальных строк и их количества.
Для подсчета уникальных строк и отображения их с количеством:
awk '{count[$0]++} END {for (line in count) print count[line], line}' file.txt
Этот скрипт увеличивает счетчик для каждой строки в массиве count
, используя строку в качестве ключа. Блок END
итерирует по массиву, выводя количество каждой строки и саму строку.
Чтобы получить только общее количество уникальных строк:
awk '{count[$0]++} END {print length(count)}' file.txt
Это использует length(count)
для прямого вывода количества уникальных строк (размера массива).
Пример:
Используя тот же file.txt
, первая команда awk
дает тот же вывод, что и метод sort | uniq -c
. Вторая команда awk
выводит 3
, указывая на три уникальные строки.
Выберите метод, который наилучшим образом соответствует вашим потребностям. sort
и uniq
проще для базовых задач; awk
обеспечивает большую гибкость для сложных сценариев.