В Linux awk — это динамо-машина для работы с текстом из командной строки, а также мощный язык сценариев. Вот введение в некоторые из его самых крутых функций.
Как awk получил свое название
Команда awk была названа по инициалам трех человек, написавших исходную версию в 1977 году: Альфред Ахо, Питер Вайнбергер, и Брайан Керниган. Эти трое были из легендарного AT&T Bell Laboratories Пантеон Unix. С тех пор при участии многих других awk продолжил развиваться.
Это полноценный язык сценариев, а также полный набор инструментов для работы с текстом для командной строки. Если эта статья возбуждает ваш аппетит, вы можете проверить каждую деталь об awk и его функциональности.
Правила, шаблоны и действия
awk работает с программами, которые содержат правила, состоящие из шаблонов и действий. Действие выполняется над текстом, который соответствует шаблону. Узоры заключаются в фигурные скобки ({}). Вместе шаблон и действие образуют правило. Вся программа awk заключена в одинарные кавычки (‘).
Давайте посмотрим на простейшую программу awk. У него нет шаблона, поэтому он соответствует каждой строке текста, введенной в него. Это означает, что действие выполняется в каждой строке. Хорошо используйте его на выходе из кто команда.
Вот стандартный вывод who:
who
Возможно, нам не нужна вся эта информация, мы просто хотим увидеть имена в учетных записях. Мы можем передать вывод who в awk, а затем сказать awk, что нужно печатать только первое поле.
По умолчанию awk считает поле строкой символов, окруженной пробелами, началом или концом строки. Поля обозначаются знаком доллара ($) и числом. Итак, $ 1 представляет первое поле, которое мы будем использовать с действием печати для печати первого поля.
Набираем следующее:
who | awk '{print $1}'
awk печатает первое поле и отбрасывает оставшуюся часть строки.
Мы можем напечатать столько полей, сколько захотим. Если мы добавим запятую в качестве разделителя, awk выведет пробел между каждым полем.
Мы вводим следующее, чтобы также распечатать время, когда человек вошел в систему (поле четыре):
who | awk '{print $1,$4}'
Есть несколько специальных идентификаторов полей. Они представляют собой всю строку текста и последнее поле в строке текста:
$ 0: представляет всю строку текста.
$ 1: представляет первое поле.
$ 2: представляет второе поле.
$ 7: представляет седьмое поле.
$ 45: представляет 45-е поле.
$ NF: обозначает «количество полей» и представляет последнее поле.
Мы введем следующее, чтобы открыть небольшой текстовый файл, содержащий короткую цитату, относящуюся к Деннис Ричи:
cat dennis_ritchie.txt
Мы хотим, чтобы awk печатал первое, второе и последнее поле цитаты. Обратите внимание: хотя он заключен в окно терминала, это всего лишь одна строка текста.
Набираем следующую команду:
awk '{print $1,$2,$NF}' dennis_ritchie.txt
Мы не знаем этой «простоты». это 18-е поле в строке текста, и нам все равно. Что мы действительно знаем, так это последнее поле, и мы можем использовать $ NF, чтобы получить его значение. Точка просто считается еще одним символом в