awk - это небольшой язык программирования для обработки текстов

 $ awk options program file

где,

* options - это опции, передаваемые awk
* program - скрипт, который будет обрабатывать файл
* file - файл, который необходимо разобрать.    

Например,

  • -F fs — позволяет указать символ-разделитель для полей в записи (в каждой строке);
  • -f file — указывает имя файла, из которого нужно прочесть awk-скрипт;
  • -v var=value — объявляет переменную, которая будет использована в скрипте.

Команды можно разделять ";"

 cat /etc/passwd | awk -F ':' '{print $1; print $3}'

BEGIN & END - блоки начала и конца файла. Ниже подсчёт количества строк в файле

 cat /etc/passwd | awk 'BEGIN {a = 0} {a=a+1} END {print a}'
 

Блоки BEGIN{} и END{} выполнились только один раз. А вот блок {} выполнился несколько раз - по количеству строк в файле

 cat /etc/passwd | awk -F ':' 'BEGIN {a = 0} {a=a+$3} END {print a}'   
 

Мы разбиваем каждую строку /etc/passwd по символу ':', объявляем переменную a равную 0, в каждой строке вытаскиваем uid ($3) и прибавляем к переменной a. И в завершение выводим переменную a на экран.

Переменные

|$0|вся строка| |$1|первая колонка| |$2|вторая колонка| |$n|nная колонка|

Встроенные переменные

FIELDWIDTHSразделитель полей по количеству символов, например FIELDWIDTHS="3 4 3", 1235.96521 будет 123 5.96 521. Используется, когда нет явных разделителей.
RSРазделитьель строк
FSSpecifies the field separator.
OFSРазделитель вывода
ORSРазделитель вывода
КомандаОписание
cat /etc/passwd awk -F ':' '{print $1}'читаем построчно файл /etc/passwd, разделяем по символу ':' и выводим только первый элемент - то есть имя пользователя.
awk {print $1} access.log|sort|iniq-c Печатаем первое поле из лога, сортируем и оставляем уникальные
for i in 'awk '{print $1}' access.log|sort -u'; do echo $i;done
for i in 'awk '{print $1}' access.log|sort -u'; do whois $i| grep "country:";done