Примеры с “awk”

 

перемещение слов в файле

 

$ cat sample1.txt

Mary Clark 101

Henry Morgan 112

Bill Williams 100

 

$ awk '{print $2","$1"\t"$3}' sample1.txt

Clark,Mary      101

Morgan,Henry    112

Williams,Bill   100

 

Знак “\t” означает ввод табуляции <TAB>.

 

поиск по значениям в полях файла

 

$ awk '$3>=101 {print $0}' sample1.txt

Mary Clark 101

Henry Morgan 112

 

поиск по заданным нескольким критериям в файле

 

$ cat sample2.txt

1970    5.50    N1

1971    5.60    N2

1972    7.70    N3

1973    7.50    N4

1974    6.80    N5

1975    7.30    N6

1976    8.10    N7

1977    8.80    N8

1978    4.30    N9

1979    6.05    N10

 

Найти в диапазоне годов 1976-1978 значения менее 8:

 

$ awk '/1976/,/1978/ {if ($2 < 8.00) print $0}' sample2.txt

1978    4.30    N9

 

использование переменных в “awk”

 

В “awk” используются следующие переменные:

NR – число записей (строк) в файле

NF – число полей в файле

FS – разделитель полей записи (по-умолчании это пробел или табулятор). Задаётся на вводе файлового потока.

 

$ awk '{for (i=NF;i>0;--i) print $i}' sample1.txt

101

Clark

Mary

112

Morgan

Henry

100

Williams

Bill

 

использование образцов

 

Образцы при обработке файлов заключаются между словами “BEGIN” и “END”. Попробуем узнать, какое количество аккаунтов в системе имеют в качестве интерпретатора команды “/bin/false” (см. man 5 passwd):

 

$ awk 'BEGIN {print "Analysis of \"/bin/false\""} /\/bin\/false/ {++n} END {print "\"/bin/false\" appears",n,"times"}' /etc/passwd

Analysis of "/bin/false"

"/bin/false" appears  22 times