AWK
AWK — интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам.
Название AWK складывается из инициалов разработчиков языка: Alfred V. Aho, Peter J. Weinberger и Brian W. Kernighan. Первая версия AWK была написана в 1977 в AT&T Bell Laboratories.
AWK рассматривает входной поток как список записей. Каждая запись делится на поля. На основе этой информации выполняется некоторый определённый программистом алгоритм обработки. По умолчанию разделителем записей является символ новой строки (то есть записи - это то же самое, что строки), разделителем полей — символ пробела или табуляции, или последовательность таких символов. Символы-разделители можно явно определить в программе. Символ-разделитель полей можно определить и в командной строке.
AWK-программа состоит из операторов (правил), имеющих вид:
шаблон {действие} шаблон {действие} . . .
Каждая запись поочерёдно сравнивается со всеми шаблонами, и каждый раз когда она соответствует шаблону, выполняется указанное действие. Если шаблон не указан, то действие выполняется для любой записи. Если не указано действие, то запись выводится. В AWK также существует 2 предопределённых шаблона BEGIN и END. BEGIN выполняется до начала обработки входного потока. END — после обработки последней записи входного потока.
Действие может состоять из последовательности операторов, разделяемой точкой с запятой, переводом строки или закрывающей скобкой.
Примеры
"Hello world!"
BEGIN{print "Hello World!"; exit}
Печать длины самой длинной строки:
{ if (length($0) > max) max = length($0) } END { print max }
Печать всех строк длиннее 80 символов:
length($0) > 80
Печать всех строк, имеющих хотя бы одно поле:
NF > 0
Печать количества строк в файле:
END { print NR }
Печать строк, номера которых кратны 3:
NR%3==0