Як використовувати команду awk в Linux

У Linux awk — це динамо-машина для маніпулювання текстом командного рядка, а також потужна мова сценаріїв. Ось вступ до деяких з його найкрутіших функцій.

Як awk отримав свою назву

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

Це повноцінна мова сценаріїв, а також повний набір інструментів для маніпулювання текстом для командного рядка. Якщо ця стаття розбудить у вас апетит, ви можете перевірте кожну деталь про awk та його функціональність.

Правила, шаблони та дії

awk працює з програмами, які містять правила, що складаються з шаблонів і дій. Дія виконується над текстом, який відповідає шаблону. Шаблони укладені у фігурні дужки ({}). Разом шаблон і дія утворюють правило. Вся програма awk береться в одинарні лапки (‘).

  Як записати робочий стіл Linux за допомогою Kooha

Давайте розглянемо найпростіший тип програми awk. У ньому немає шаблону, тому він відповідає кожному рядку тексту, що вводиться в нього. Це означає, що дія виконується в кожному рядку. Добре використовувати його на виході з хто командує.

Ось стандартний вихід від who:

who

The

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

За замовчуванням awk розглядає поле як рядок символів, оточених пробілами, початком рядка або кінцем рядка. Поля позначаються знаком долара ($) і числом. Отже, $1 являє собою перше поле, яке ми будемо використовувати з дією print для друку першого поля.

  Як запустити програми Android на Linux

Набираємо наступне:

who | awk '{print $1}'

awk друкує перше поле і відкидає решту рядка.

Ми можемо надрукувати скільки завгодно полів. Якщо ми додамо кому як роздільник, awk друкує пробіл між кожним полем.

Ми вводимо наступне, щоб також надрукувати час, коли людина ввійшла в систему (поле четверте):

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

Існує кілька спеціальних ідентифікаторів полів. Вони представляють весь рядок тексту та останнє поле в рядку тексту:

$0: представляє весь рядок тексту.
$1: представляє перше поле.
$2: представляє друге поле.
$7: представляє сьоме поле.
$45: представляє 45-е поле.
$NF: означає «кількість полів» і представляє останнє поле.

  5 найкращих дистрибутивів Linux для кращого терміну служби батареї

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

cat dennis_ritchie.txt

The

Ми хочемо, щоб awk надрукував перше, друге та останнє поля цитати. Зауважте, що, хоча він обертається у вікні терміналу, це лише один рядок тексту.

Вводимо таку команду:

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

Ми не знаємо цієї «простоти». це 18-е поле в рядку тексту, і нам байдуже. Ми знаємо, що це останнє поле, і ми можемо використовувати $NF, щоб отримати його значення. Цей період просто вважається ще одним персонажем у