Важное замечание по экранированию символа
$в Debian и подобных дистрибутивах:
В большинстве документации и примеров дляawkможно встретить запись с экранированием символа$— например,\$1,\$3и т.д. Это нужно в некоторых оболочках или системах для предотвращения подстановки переменных оболочкой.Однако в Debian и большинстве современных Linux-дистрибутивов при использовании одинарных кавычек (
'...') экранировать$не требуется.
Таким образом, запись видаawk -F: '\$3 >= 1000 { print \$1 }' /etc/passwd >следует писать проще и корректнее как
awk -F: '$3 >= 1000 { print $1 }' /etc/passwd >Это упрощает запись и улучшает читаемость команд.
Общий вид команды:
awk 'условие {действие}' файл
По умолчанию awk разбивает каждую строку на поля, разделённые пробелом или табуляцией.
$0 — вся строка целиком.$1 — первое поле.$2 — второе поле.Можно изменить разделитель полей с помощью опции -F или внутри программы, задав переменную FS.
Вывести первый столбец файла /etc/passwd (имена пользователей):
awk -F: '{ print $1 }' /etc/passwd
Здесь разделитель -F: — двоеточие, так как поля в /etc/passwd разделены двоеточиями.
Вывести строки, где третий столбец (UID) больше или равен 1000:
awk -F: '$3 >= 1000 { print $0 }' /etc/passwd
Можно опустить { print $0 }, так как по умолчанию выводится вся строка:
awk -F: '$3 >= 1000' /etc/passwd
Посчитать сумму чисел во втором столбце файла data.txt:
awk '{ sum += $2 } END { print sum }' data.txt
sum += $2 — для каждой строки добавляем значение второго поля к переменной sum.END { print sum } — после обработки всех строк выводим сумму.Вывести строки, где значение второго поля больше 50, и показать только первое и второе поле:
awk '$2 > 50 { print $1, $2 }' data.txt
Вывести имя пользователя и UID из /etc/passwd с форматированием:
awk -F: '{ printf "User: %s, UID: %d\n", $1, $3 }' /etc/passwd
awkNR — номер текущей обрабатываемой строки.NF — количество полей в текущей строке.FS — разделитель полей (input field separator).OFS — разделитель полей при выводе (output field separator).Вывести имена пользователей и их полные имена (GECOS) только для обычных пользователей с UID от 1000 до 65533:
awk -F: '$3 >= 1000 && $3 < 65534 { print $1, "-", $5 }' /etc/passwd
awk — универсальный инструмент для обработки текстовых данных. Он позволяет быстро фильтровать, преобразовывать и анализировать данные, используя простой, но мощный язык программирования. Освоение awk значительно расширит ваши возможности работы с текстовыми файлами в Linux.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()