Обзор
Оператор `print` в `awk` используется для вывода данных, извлеченных из входных записей (строк), в стандартный вывод. Вы можете выбирать данные по полям (столбцам), комбинировать несколько полей для вывода и контролировать вывод в зависимости от условий. `print` является одним из самых основных действий в скриптах `awk`.
Основные возможности
Ключевые возможности `awk print` включают:
- Вывод всей строки или определенных полей
- Использование встроенных переменных (NR, NF, FS, RS и т. д.)
- Вывод комбинаций строк и полей
- Поддержка условного вывода
- По умолчанию добавляет перевод строки после каждого вывода
Примеры использования
Различные примеры использования оператора `print` в `awk`. Предполагается, что пример файла `data.txt` выглядит следующим образом: `apple 10 red banana 20 yellow orange 15 orange`
Вывод всей строки
awk '{print}' data.txt
Выводит все строки входного файла как есть.
Вывод первого поля
awk '{print $1}' data.txt
Выводит только первое поле ($1) каждой строки.
Вывод нескольких полей и пользовательской строки
awk '{print "Item:", $1, "Color:", $3}' data.txt
Выводит первое и третье поля, разделенные запятой, и добавляет пользовательскую строку.
Вывод при выполнении определенного условия
awk '$2 > 15 {print}' data.txt
Выводит только те строки, где второе поле ($2) больше 15.
Вывод последнего поля
awk '{print $NF}' data.txt
Выводит последнее поле ($NF) каждой строки. NF — это встроенная переменная, представляющая общее количество полей в текущей строке.
Вывод после изменения разделителя полей
echo "fruit,100,red\nbanana,200,yellow" | awk -F',' '{print $1, $2}'
Указывает разделитель полей ввода (-F) как запятую (,) и выводит первое и второе поля. (Пример файла: `fruit,100,red\nbanana,200,yellow`)
Советы и примечания
Советы и моменты, на которые стоит обратить внимание при более эффективном использовании `awk print`.
Советы по производительности и использованию
- Используйте `printf` вместо `print`: `printf` позволяет точно контролировать форматирование, аналогично `printf` в языке C. `print` по умолчанию вставляет OFS (разделитель полей вывода) между каждым аргументом и добавляет OSR (разделитель записей вывода, по умолчанию перевод строки), тогда как `printf` требует явного указания формата пользователем.
- Четко указывайте разделитель полей (`-F`): Если разделитель полей во входном файле не является пробелом, используйте опцию `-F` для обеспечения правильного разделения полей.
- Управляйте сложной логикой в файлах скриптов `awk`: Если скрипт становится длинным, лучше управлять им в отдельном файле, используя формат `awk -f script.awk data.txt` для улучшения читаемости и удобства сопровождения.
- Используйте встроенные переменные: Использование мощных встроенных переменных `awk`, таких как `NR` (номер текущей записи), `NF` (количество полей в текущей записи), `FS` (разделитель полей ввода), `RS` (разделитель записей ввода), позволяет осуществлять более гибкую обработку.