Как использовать команду awk в Linux

В Linux awk — это динамо-машина для работы с текстом из командной строки, а также мощный язык сценариев. Вот введение в некоторые из его самых крутых функций.

Как awk получил свое название

Команда awk была названа по инициалам трех человек, написавших исходную версию в 1977 году: Альфред Ахо, Питер Вайнбергер, и Брайан Керниган. Эти трое были из легендарного AT&T Bell Laboratories Пантеон Unix. С тех пор при участии многих других awk продолжил развиваться.

Это полноценный язык сценариев, а также полный набор инструментов для работы с текстом для командной строки. Если эта статья возбуждает ваш аппетит, вы можете проверить каждую деталь об awk и его функциональности.

  Как настроить Mattermost в Linux

Правила, шаблоны и действия

awk работает с программами, которые содержат правила, состоящие из шаблонов и действий. Действие выполняется над текстом, который соответствует шаблону. Узоры заключаются в фигурные скобки ({}). Вместе шаблон и действие образуют правило. Вся программа awk заключена в одинарные кавычки (‘).

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

Вот стандартный вывод who:

who

В

Возможно, нам не нужна вся эта информация, мы просто хотим увидеть имена в учетных записях. Мы можем передать вывод who в awk, а затем сказать awk, что нужно печатать только первое поле.

  Как выполнить чистую установку Firefox в Linux с нуля

По умолчанию awk считает поле строкой символов, окруженной пробелами, началом или концом строки. Поля обозначаются знаком доллара ($) и числом. Итак, $ 1 представляет первое поле, которое мы будем использовать с действием печати для печати первого поля.

Набираем следующее:

who | awk '{print $1}'

В

awk печатает первое поле и отбрасывает оставшуюся часть строки.

Мы можем напечатать столько полей, сколько захотим. Если мы добавим запятую в качестве разделителя, awk выведет пробел между каждым полем.

Мы вводим следующее, чтобы также распечатать время, когда человек вошел в систему (поле четыре):

who | awk '{print $1,$4}'

В

Есть несколько специальных идентификаторов полей. Они представляют собой всю строку текста и последнее поле в строке текста:

$ 0: представляет всю строку текста.
$ 1: представляет первое поле.
$ 2: представляет второе поле.
$ 7: представляет седьмое поле.
$ 45: представляет 45-е поле.
$ NF: обозначает «количество полей» и представляет последнее поле.

  Как играть в Wasteland 2: Режиссерская версия на Linux

Мы введем следующее, чтобы открыть небольшой текстовый файл, содержащий короткую цитату, относящуюся к Деннис Ричи:

cat dennis_ritchie.txt

В

Мы хотим, чтобы awk печатал первое, второе и последнее поле цитаты. Обратите внимание: хотя он заключен в окно терминала, это всего лишь одна строка текста.

Набираем следующую команду:

awk '{print $1,$2,$NF}' dennis_ritchie.txt

В

Мы не знаем этой «простоты». это 18-е поле в строке текста, и нам все равно. Что мы действительно знаем, так это последнее поле, и мы можем использовать $ NF, чтобы получить его значение. Точка просто считается еще одним символом в