Как да напиша AWK команди и скриптове

Команди, синтаксис и примери

Командата awk е мощен метод за обработка или анализиране на текстови файлове - по-специално, файлове с данни, които са организирани от линии (редове) и колони.

Обикновените awk команди могат да се изпълняват от командния ред . По-сложни задачи трябва да бъдат написани като awk програми (т.нар. Awk скриптове) във файл.

Основният формат на командата awk изглежда така:

awk 'модел {action}' вход-файл 'изходен файл

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

awk '{print $ 5}' table1.txt 'výstup1.txt

Това изречение взема елемента на 5-та колона на всеки ред и го записва като линия в изходния файл "output.txt". Променливата "$ 4" се отнася до втората колона. По същия начин можете да осъществите достъп до първата, втората и третата колона с $ 1, $ 2, $ 3 и т.н. По подразбиране колоните се приемат като разделени с интервали или раздели (т.нар бяло пространство). Така че, ако входният файл "table1.txt" съдържа следните редове:

1, Джъстин Тимбърлейк, Дял 545, Цена $ 7.30 2, Тейлър Суифт, Заглавие 723, Цена $ 7.90 3, Мик Джагър, Заглавие 610, Цена $ 7.90 4, Лейди Гага, Заглавие 118, Цена $ 7.30 5, Johnny Cash, Дял 482, Цена $ 6.50 6, Елвис Пресли, Заглавие 335, Цена $ 7.30 7, Джон Ленън, Дял 271, Цена $ 7.90 8, Майкъл Джексън, Заглавие 373, Цена $ 5.50

След това командата ще напише следните линии към изходния файл "output1.txt":

545, 723, 610, 118, 482, 335, 271, 373,

Ако разделителят на колони е нещо различно от интервали или раздели, като запетая, можете да посочите в израза awk както следва:

awk -F, '{print $ 3}' tab1.txt> výstup1.txt

Това ще избере елемента от колона 3 на всеки ред, ако колоните се считат за разделени със запетая. Следователно продукцията в този случай би била:

Заглавие 545 Заглавие 723 Заглавие 610 Заглавие 118 Заглавие 482 Заглавие 335 Заглавие 271 Заглавие 373

Списъкът с изрази в вътрешните скоби ("{','} ') се нарича блок. Ако поставите условен израз пред блок, изявлението вътре в блока ще бъде изпълнено само ако условието е вярно.

awk '$ 7 == "\ $ 7,30" {print $ 3}' table1.txt

В този случай условието е $ 7 == "\ $ 7.30", което означава, че елементът в колона 7 е равен на $ 7.30. Обратната наклонена черта пред знака на долара се използва, за да не може системата да интерпретира $ 7 като променлива и вместо това да вземе знака за долар буквално.

Така че това изявление awk отпечатва елемента в третата колона на всеки ред, който има "7,30 щ.д." в колона 7.

Също така можете да използвате регулярни изрази като условие. Например:

awk '/ 30 / {print $ 3}' tab1.txt

Връзката между двете наклони ('/') е регулярен израз. В този случай това е само низът "30." Това означава, че ако даден ред съдържа "30", системата отпечатва елемента в третата колона на този ред. Изходът в горния пример ще бъде:

Тимбърлейк, Гага, Пресли,

Ако елементите на таблицата са номера awk, те могат да извършват изчисления върху тях, както в този пример:

awk '{print ($ 2 * $ 3) + $ 7}

Освен променливите, които имат достъп до елементи от текущия ред ($ 1, $ 2 и т.н.), има променливата $ 0, която се отнася до пълния ред (линия) и променливата NF, която се държи спрямо броя полета.

Можете също така да дефинирате нови променливи, както в този пример:

awk '{сума = 0; за (col = 1; col <= NF; col ++) сума + = $ col; печатна сума; } "

Това изчислява и отпечатва сумата от всички елементи на всеки ред.

Изявленията на Awk често се комбинират със седалкови команди .