linux-labs

Вики / Базовые команды

Текстовые инструменты (sort, uniq, cut, wc, tr)

Команда GNU coreutils БазовоеТекст и потоки

Обработка текста и потоков — сортировка, уникальность, столбцы, подсчёт.

Маленькие утилиты, которые в конвейере (|) решают почти любую задачу обработки текста. Часто в связке с grep и sed/awk.

sort file                         # отсортировать строки (лексикографически)
sort -n file                      # как числа
sort -rn file                     # по убыванию (числа)
sort -h file                      # человеко-размеры (2K, 1G)
sort -k2 file                     # по 2-му полю
sort -t: -k3 -n /etc/passwd       # разделитель «:», по 3-му полю, числами
sort -u file                      # отсортировать + убрать дубли
sort -c file                      # проверить, отсортирован ли

uniq file                         # убрать ПОДРЯД идущие дубли (нужен sort!)
sort file | uniq -c               # посчитать повторы каждой строки
sort file | uniq -c | sort -rn    # топ по частоте
sort file | uniq -d               # только повторяющиеся ; -u — только уникальные
cut -d: -f1 /etc/passwd           # 1-е поле, разделитель «:»
cut -d: -f1,3 /etc/passwd         # несколько полей
cut -c1-10 file                   # символы 1–10
tr 'a-z' 'A-Z' < file             # в верхний регистр
tr -d ' \t' < file                # удалить пробелы/табы
tr -s ' ' < file                  # схлопнуть повторяющиеся пробелы
tr -cd '[:print:]\n' < file       # выкинуть непечатаемые
wc -l file ; wc -w file ; wc -c   # строк / слов / байт
paste -d, a.txt b.txt             # склеить файлы по столбцам
join -t, -1 1 -2 1 a.csv b.csv    # реляционный join по ключу (оба отсортированы)
column -t -s, data.csv            # выровнять в таблицу
comm -12 <(sort a) <(sort b)      # строки, общие для двух файлов
# топ-10 IP в access.log
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

# уникальные значения колонки CSV
cut -d, -f3 data.csv | sort -u

# самые частые слова
tr -cs '[:alpha:]' '\n' < text | tr 'A-Z' 'a-z' | sort | uniq -c | sort -rn | head

# разница двух списков (что есть в A, но нет в B)
comm -23 <(sort A) <(sort B)

# красиво показать /etc/passwd как таблицу
column -t -s: /etc/passwd
sort -u file                      # сортировка + уникальные
sort file | uniq -c | sort -rn    # частота строк (топ)
cut -d: -f1 file                  # колонка по разделителю
tr 'a-z' 'A-Z' < file             # регистр
column -t -s, file.csv            # выровнять в таблицу
comm -12 <(sort a) <(sort b)      # пересечение двух файлов

См. также