Як пісаць каманды і скрыпты AWK

Каманды, сінтаксіс і прыклады

Каманда AWK магутны метад для апрацоўкі або аналізу тэкставых файлаў, у прыватнасці, файлы дадзеных, якія арганізаваны па лініі (радкі) і слупкоў.

Простыя каманды AWK можна запусціць з каманднага радка . Больш складаныя задачы павінны быць запісаныя ў выглядзе AWK праграм (так званыя AWK скрыпты) у файл.

Асноўны фармат камандай AWK выглядае наступным чынам:

«Шаблон {дзеянне}» AWK уваходнай-файл> выхадны-файл

Гэта азначае, што: вазьміце кожную радок уваходнага файла; калі радок утрымлівае шаблон прымяніць дзеянне лініі і запісаць атрыманую радок у выхадны-файл. Калі шаблон апушчаны, то дзеянне прымяняецца да ўсёй лініі. Напрыклад:

AWK '{друк $ 5}' table1.txt> output1.txt

Гэта зацвярджэнне мае элемент 5 слупку кожнага радка і запісвае яго ў выглядзе радка ў выходны файл «output.txt». Пераменная «$ 4» адносіцца да другой калонцы. Аналагічна можна атрымаць доступ да першага, другога і трэцяга слупка, з $ 1, $ 2, $ 3 і г.д. Па змаўчанні слупкоў мяркуюцца быць падзеленыя прабеламі або укладкамі (так званы белым прабел). Такім чынам, калі ўваходны файл «table1.txt» змяшчае наступныя радкі:

1, Justin Timberlake, назва 545, Кошт: $ 7,30 2, Taylor Swift, назва 723, Цана $ 7,90 3, Мік Джагер, назва 610, Цана $ 7,90 4, Lady Gaga, назва 118, Цана $ 7,30 5, Джоні Кэш, назва 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 '{друку $ 3}' table1.txt> output1.txt

Гэта дазволіць выбраць элемент з калонкі 3 кожнага радка, калі слупкі лічацца быць падзеленыя коскі. Таму выхад, у гэтым выпадку будзе:

Назва 545 назву 723 назву 610 назву 118 назву 482 назву 335 назву 271 назву 373

Спіс аператараў ўнутры фігурных дужак ( «{», «}») называецца блокам. Калі паставіць ўмоўнае выраз перад блокам, зацвярджэнне ўнутры блока будзе выконвацца толькі калі ўмова праўдзіва.

AWK '$ 7 == "\ $ 7,30" {друку $ 3}' table1.txt

У гэтым выпадку ўмова $ 7 == «\ $ 7,30», што азначае, што элемент у слупку 7 роўны $ 7,30. Зваротны касая рыса перад знакам даляра выкарыстоўваецца для абароны сістэмы ад інтэрпрэтацыі $ 7 у якасці пераменнага і замест таго, каб узяць на сябе знак даляра літаральна.

Так што гэта AWK аператар друкуе з элемента ў 3-м слупку кожнага радка, якая мае «$ 7,30» у калонцы 7.

Вы таксама можаце выкарыстоўваць рэгулярныя выразы ў якасці ўмовы. Напрыклад:

AWK '/ 30 / {друку $ 3}' table1.txt

Радок паміж двума касымі рысамі ( «/») з'яўляецца рэгулярным выразам. У гэтым выпадку, гэта проста радок «30.» Гэта азначае, што калі радок утрымлівае радок «30», то сістэма выводзіць элемент на 3-м слупку гэтага радка. Выхад у прыведзеным вышэй прыкладзе будзе выглядаць так:

Timberlake, Gaga, Presley,

Калі элементы табліцы з'яўляюцца лікамі AWK можна запусціць вылічэнні на іх, як у гэтым прыкладзе:

AWK '{Друк ($ 2 * $ 3) + $ 7}'

Акрамя зменных, якія звяртаюцца да элементаў бягучай радкі ($ 1, $ 2, і г.д.) існуе пераменны $ 0, які адносіцца да поўнай радку (радках) і зменнай NF, які трымае ў шэраг абласцей.

Вы можаце таксама вызначыць новыя зменныя, як у гэтым прыкладзе:

AWK «{сума = 0; для (COL = 1; Col <= NF; Col ++) , сума + = $ Col; друк сума; } »

Гэта вылічае і выводзіць суму ўсіх элементаў кожнага радка.

Awk заявы часта ў спалучэнні з SED каманд .