Обзор
awk читает входные данные как записи (по умолчанию: строки), делит их по разделителю полей (FS), затем применяет шаблон/действие { ... } и выводит желаемый результат (OFS). Типичные применения включают извлечение столбцов, фильтрацию по условиям, расчет сумм/средних значений, преобразование форматов и т.д.
Основные встроенные переменные
Основные встроенные переменные, управляющие операциями ввода-вывода и форматированием.
- NR: Номер записи (строки), прочитанной до сих пор
- FNR: Номер записи в текущем файле
- NF: Количество полей в текущей записи
- FS: Разделитель входных полей (по умолчанию пробел)
- OFS: Разделитель выходных полей (по умолчанию пробел)
- RS: Разделитель записей (по умолчанию новая строка)
- ORS: Разделитель выходных записей (по умолчанию новая строка)
Базовая форма
awk '패턴 { 액션 }' input.txt
awk -f program.awk input.txt
Блок 'шаблон/действие' передается одной строкой, либо файл скрипта передается с помощью -f.
Основные опции
Опции, часто используемые на практике, сгруппированы по ситуациям. Включает опции, совместимые с gawk.
1) 기본 실행/입력
2) 필드/변수 전달
3) 디버깅/호환(gawk)
4) 도움말/버전
Сгенерированная команда:
Комбинируйте команды.
Описание:
`awk` Запускает команду.
Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.
Часто используемые шаблоны
Извлечение столбцов
awk -F ':' '{ print $1, $3 }' /etc/passwd
Вывод только 1-го и 3-го полей, разделенных двоеточием
Фильтрация по условию
awk '$5 > 100 { print }' data.tsv
Вывод только записей, где значение 5-го поля больше 100
Пример агрегации
awk '{ sum += $2 } END { print sum }' data.txt
Сумма второго столбца
Передача переменных и формат
awk -v OFS=',' '$1=="KEY" { print $1, $2, $3 }' input.txt
Установка OFS в запятую и вывод только определенных ключей
Практические советы
Обработка потока построчно, поэтому комбинации с пайпами очень мощные.
- В разделителе полей можно использовать регулярные выражения: -F '[,:\t]+'
- Можно писать программы по частям, используя несколько -e
- Длинные скрипты разделяйте с помощью -f и управляйте версиями через git
- Настраивайте формат вывода, регулируя OFS/ORS
- Для больших объемов ввода упрощайте конвейер, оставляя только минимально необходимые операции