AWK - основные примеры

В этой главе описывается несколько полезных команд AWK и соответствующие примеры. Рассмотрим текстовый файлmarks.txt для обработки со следующим содержанием -

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

Печать столбца или поля

Вы можете указать AWK печатать только определенные столбцы из поля ввода. Следующий пример демонстрирует это -

пример

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

Выполнив этот код, вы получите следующий результат -

Выход

Physics   80
Maths     90
Biology   87
English   85
History   89

В файле marks.txt, третий столбец содержит название темы, а четвертый столбец - оценки, полученные по определенной теме. Давайте распечатаем эти два столбца с помощью команды печати AWK. В приведенном выше примере$3 and $4 представляют третье и четвертое поля соответственно из входной записи.

Печать всех строк

По умолчанию AWK печатает все строки, соответствующие шаблону.

пример

[jerry]$ awk '/a/ {print $0}' marks.txt

Выполнив этот код, вы получите следующий результат -

Выход

2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

В приведенном выше примере мы ищем шаблон формы a. Когда сопоставление с образцом выполнено успешно, выполняется команда из основного блока. При отсутствии блока тела - по умолчанию выполняется действие печати записи. Следовательно, следующая команда дает тот же результат -

пример

[jerry]$ awk '/a/' marks.txt

Печать столбцов по шаблону

При успешном сопоставлении с образцом AWK по умолчанию печатает всю запись. Но вы можете указать AWK печатать только определенные поля. Например, в следующем примере третье и четвертое поля печатаются при успешном сопоставлении с шаблоном.

пример

[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt

Выполнив этот код, вы получите следующий результат -

Выход

Maths    90
Biology  87
English  85
History  89

Печать столбца в любом порядке

Вы можете печатать столбцы в любом порядке. Например, в следующем примере печатается четвертый столбец, за которым следует третий столбец.

пример

[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt

Выполнив приведенный выше код, вы получите следующий результат -

Выход

90   Maths
87   Biology
85   English
89   History

Подсчет и печать согласованного шаблона

Давайте посмотрим на пример, где вы можете подсчитать и распечатать количество строк, для которых совпадение с шаблоном было успешным.

пример

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

Выполнив этот код, вы получите следующий результат -

Выход

Count = 4

В этом примере мы увеличиваем значение счетчика при успешном совпадении с шаблоном и печатаем это значение в блоке END. Обратите внимание, что, в отличие от других языков программирования, нет необходимости объявлять переменную перед ее использованием.

Печать строк, содержащих более 18 символов

Будем печатать только те строки, которые содержат более 18 символов.

пример

[jerry]$ awk 'length($0) > 18' marks.txt

Выполнив этот код, вы получите следующий результат -

Выход

3) Shyam   Biology   87
4) Kedar   English   85

AWK предоставляет встроенный length функция, возвращающая длину строки. $0переменная хранит всю строку, и при отсутствии блока тела выполняется действие по умолчанию, то есть действие печати. Следовательно, если строка содержит более 18 символов, тогда сравнение будет истинным и строка будет напечатана.