Как да използвате командата awk в Linux

В Linux awk е динамо за манипулиране на текст от командния ред, както и мощен скриптов език. Ето въведение в някои от най-готините му функции.

Как awk получи името си

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

Това е пълен скриптов език, както и пълен набор от инструменти за манипулиране на текст за командния ред. Ако тази статия възбуди апетита ви, можете проверете всеки детайл за awk и неговата функционалност.

Правила, модели и действия

awk работи върху програми, които съдържат правила, състоящи се от модели и действия. Действието се изпълнява върху текста, който съответства на шаблона. Моделите са затворени в къдрави скоби ({}). Заедно модел и действие образуват правило. Цялата програма awk е затворена в единични кавички (‘).

  Как да изтегляте файлове на Linux с Curl

Нека да разгледаме най-простия тип програма awk. Той няма шаблон, така че съответства на всеки ред текст, въведен в него. Това означава, че действието се изпълнява на всеки ред. Добре използвайте го на изхода от който командва.

Ето стандартния изход от кой:

who

В

Може би нямаме нужда от цялата тази информация, а по-скоро просто искаме да видим имената в сметките. Можем да пренесем изхода от who в awk и след това да кажем на awk да отпечата само първото поле.

По подразбиране awk счита полето за низ от знаци, заобиколен от интервали, началото на ред или края на ред. Полетата се идентифицират със знак за долар ($) и число. И така, $1 представлява първото поле, което ще използваме с действието за печат, за да отпечатаме първото поле.

  Как да получите жестове на тъчпада на Macbook на Linux

Пишем следното:

who | awk '{print $1}'

awk отпечатва първото поле и изхвърля останалата част от реда.

Можем да отпечатаме толкова полета, колкото пожелаем. Ако добавим запетая като разделител, awk отпечатва интервал между всяко поле.

Пишем следното, за да отпечатаме и времето, в което лицето е влязло (четвърто поле):

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

Има няколко специални идентификатора на полета. Те представляват целия ред на текста и последното поле в реда на текста:

$0: Представлява целия ред от текст.
$1: Представлява първото поле.
$2: Представлява второто поле.
$7: Представлява седмото поле.
$45: Представлява 45-то поле.
$NF: означава „брой полета“ и представлява последното поле.

  Как да зададете променливи на средата в Bash на Linux

Ще напишем следното, за да изведем малък текстов файл, който съдържа кратък цитат, приписан на Денис Ричи:

cat dennis_ritchie.txt

В

Искаме awk да отпечата първото, второто и последното поле на цитата. Имайте предвид, че въпреки че е обвит в прозореца на терминала, това е само един ред текст.

Набираме следната команда:

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

Ние не познаваме тази „простота“. е 18-то поле в реда на текста и не ни интересува. Това, което знаем, е, че е последното поле и можем да използваме $NF, за да получим стойността му. Периодът просто се счита за друг герой в