Учебники

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 и $ 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 . Когда сопоставление с образцом завершается успешно, он выполняет команду из блока body. При отсутствии блока тела — выполняется действие по умолчанию, которое заключается в печати записи. Следовательно, следующая команда дает тот же результат —

пример

[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 предоставляет встроенную функцию длины, которая возвращает длину строки. Переменная $ 0 хранит всю строку, и при отсутствии блока тела выполняется действие по умолчанию, то есть действие печати. Следовательно, если строка содержит более 18 символов, то результаты сравнения верны, и строка печатается.