$2==""
$2~/^$/
$2!~/./
length($2) == 0
Символ ~
! — отсутствие соответствия. Само регулярное выражение заключено в символы дробной черты.Встроенная функция length
!($2=="")
Операция !
sed эта операция следует за шаблоном.Наиболее типичное использование шаблонов в программе awk
%, вычисляющей остаток от деления, четно или не четно число полей в каждой входной строке:$ NF % 2 != 0 # напечатать, если нечетное число полей
Другой шаблон выдает исключительно длинные строки, используя встроенную функцию length
length ($0) >72 # напечатать, если слишком длинная строка
В программе awk
# отмечает начало комментария.Можно сделать выходной поток более информативным, снабдив его предупреждающим сообщением и частью слишком длинной строки, используя для этого встроенную функцию substr
length($0) > 72 {print "Строка", NR, "длинная" : substr($0, 1, 60)}
Функция substr(s, m, n)
m и длиной в n символов. (Символы в строке нумеруются с 1.) Если n отсутствует, то берется подстрока от m до конца строки. Эту функцию можно использовать для выделения полей с фиксированным положением, например выделить время в часах и минутах из результата выполнения команды date:$ date
Thu Sep 29 12:17:01 EDT 1983
$ date | awk '{print substr($4, 1, 5) }'
12:17
$
Сколько различных программ awk
cat? Какая из них самая короткая?BEGINENDПрограмма awk
BEGIN и END. Действия, соответствующие BEGIN, выполняются прежде, чем читается первая входная строка; можно использовать этот шаблон для инициации переменных, печати заголовков или для установки символа разделителя полей, присваивая его переменной FS.$ awk 'BEGIN { FS = ":" }
> $2 == "" ' /etc/paswd
$
Действия, указанные в шаблоне END
$ awk 'END {print NR}'...
Здесь печатается число строк входного потока.
До сих пор в примерах выполнялись только простые операции с текстом. Достоинством программы awk
{s=s+$1}
END {print s}
Поскольку число значений доступно с помощью переменной NR
END {print s, s/NR}
мы получим и сумму, и среднее значение.
Этот пример показывает, как используются переменные в awk. Переменная s
В программе awk
{s+=$1}
END {print}
Запись s+=$1
s=s+$1, но более компактна. Можно обобщить пример по подсчету входных строк: { nc+=length($0) +1 # число символов, +1 для \n
nw += NF # число слов
}
END {print NR, nw, nc }
Здесь подсчитывается число строк, слов и символов входного потока, т.е. выполняются те же действия, что и по команде wc