Короткий ответ
Нужно вырезать нужный столбец (cut или awk), отсортировать значения (sort) и посчитать количество повторений каждого уникального значения (uniq -c) — связка этих утилит в конвейере обрабатывает файлы такого размера за секунды без загрузки всего файла в память целиком.
Как это работает подробнее
- Как это работает: каждая утилита в конвейере (
|) читает поток построчно и передаёт результат следующей команде, не требуя, чтобы весь файл помещался в память;awk -F',' '{print $N}'извлекает N-й столбец по разделителю,sortупорядочивает строки (необходимо передuniq, так какuniqсхлопывает только соседние одинаковые строки), аuniq -cсчитает количество повторений.
Пример кода
count_errors.sh
tail -n +2 pipeline_log.csv | awk -F',' '{print $3}' | sort | uniq -c | sort -rn | head -n 10Что использовать на практике
- На практике: такой подход значительно быстрее, чем открывать файл в Excel (который может не осилить 2 млн строк) или грузить весь CSV в pandas только ради
value_counts()по одному столбцу; это особенно удобно для быстрой диагностики прямо на сервере, где хранятся логи, без необходимости скачивать файл локально. - Пример и проверка. Это выводит топ-10 самых частых кодов ошибок (третий столбец) с их количеством, отсортированных по убыванию частоты. Проверка: сумма всех чисел в выводе uniq -c по всем кодам должна быть равна wc -l pipeline_log.csv минус строка заголовка.
Подводные камни
- Частые ошибки: забыть пропустить строку заголовка (
tail -n +2), из-за чего название столбца «error_code» попадёт в подсчёт как одно из значений; не отсортировать данные передuniq -c, из-за чего одинаковые значения, идущие не подряд, посчитаются как разные группы.