cut, sort, uniq

Тема дорожной карты · Bash

Команды cut, sort и uniq являются ключевыми инструментами для обработки текста в Unix-подобных системах, включая Linux. Эти утилиты позволяют извлекать, упорядочивать и удалять дублирующиеся строки, что делает их незаменимыми для анализа логов, работы с CSV-файлами и других задач обработки данных. В Bash-скриптах эти команды часто объединяются в конвейеры для автоматизации и обработки данных в командной строке.

cut используется для извлечения определенных полей или символов из строк. Например, команда cut -d: -f1 извлекает первое поле из каждой строки, используя двоеточие в качестве разделителя. Это полезно для анализа файлов конфигурации, таких как /etc/passwd, или CSV-файлов. Команда cut -c1-10 извлекает первые десять символов из каждой строки, что может быть полезно для работы с данными фиксированной ширины.

sort сортирует строки по алфавиту или численно, а также может удалять дублирующиеся строки. Например, команда sort -n сортирует строки численно, sort -r сортирует строки в обратном порядке, а sort -u удаляет дублирующиеся строки. Команда sort -k2,2n сортирует строки по второму полю численно, что делает её мощным инструментом для ранжирования и организации данных.

uniq сворачивает смежные дублирующиеся строки в одну. В сочетании с sort и uniq, можно создать конвейер для подсчета частоты значений, который часто используется в Bash-скриптах для анализа логов. Например, команда sort | uniq -c | sort -rn подсчитывает количество повторений каждой строки и сортирует их по убыванию.

Конвейеры cut | sort | uniq являются фундаментальным шаблоном, используемым каждым Linux-инженером для извлечения данных, дедупликации и формирования отчетов в скриптах автоматизации. Они позволяют эффективно обрабатывать большие объемы данных и извлекать полезную информацию.

Как это работает

cut, sort и uniq используются в Unix-конвейерах вместе с другими утилитами, такими как grep (поиск по регулярным выражениям), sed (редактирование потока), awk (обработка записей), tr (трансляция символов), head (вывод первых строк), tail (вывод последних строк), wc (подсчет строк, слов и байт) и xargs (передача аргументов командам). Эти утилиты часто объединяются в конвейеры для выполнения сложных операций над текстовыми данными.

Пример конвейера: cat access.log | grep " 500 " | awk '{print $7}' | sort | uniq -c | sort -rn | head. Этот конвейер отвечает на вопрос "какие URL чаще всего возвращают код ошибки 500?".

Когда применять

Эти инструменты полезны для анализа логов, работы с CSV-файлами и быстрых агрегаций данных. awk используется, когда записи имеют поля, sed -i используется для in-place правки файлов с возможностью создания резервной копии (sed -i.bak), а grep -E или grep -P используются для более сложного поиска по регулярным выражениям.

Для повторяющихся задач рекомендуется оформлять их в скрипты и использовать shellcheck для проверки синтаксиса и выявления потенциальных проблем.

Типичные ошибки

Команды cut, sort и uniq могут быть источником ошибок, если не использовать их правильно. Например, sed -i "" может работать по-разному на GNU sed (Linux) и BSD sed (macOS), что может привести к непредсказуемому поведению скриптов. Жадные регулярные выражения могут матчит больше строк, чем ожидалось, что может привести к неверным результатам. Также sort может зависеть от локали, что может привести к неправильной сортировке в некоторых случаях. Для обеспечения стабильного поведения рекомендуется использовать LC_ALL=C для управления порядком байтов в скриптах.

Связанные понятия

Полезные ресурсы