Kaip parašyti AWK komandas ir scenarijus

Komandos, sintaksė ir pavyzdžiai

"Awk" komanda yra galingas teksto failų apdorojimo ar analizavimo metodas, ypač duomenų failai, kuriuos sudaro eilutės (eilutės) ir stulpeliai.

Paprasti awk komandos gali būti paleisti iš komandinės eilutės . Sunkesnės užduotys turėtų būti parašytos kaip awk programos (vadinamosios awk scenarijus) į failą.

Pagrindinis "awk" komandos formatas atrodo taip:

awk "modelio {action}" input-file "išvesties failas

Tai reiškia: paimkite kiekvieną įvesties failo eilutę; jei eilutėje yra modelio, taikykite veiksmą linijai ir įrašykite gautą eilutę į išvesties failą. Jei modelis praleistas, veiksmas taikomas visai eilutei. Pavyzdžiui:

awk '(spausdinti $ 5)' table1.txt> output1.txt

Šis teiginys paimamas iš kiekvienos eilutės 5-ojo stulpelio elemento ir įrašomas kaip išvesties failo "output.txt" eilutė. Kintamasis "$ 4" reiškia antrąjį stulpelį. Panašiai galite pasiekti pirmąjį, antrąjį ir trečiąjį stulpelius su $ 1, $ 2, $ 3 ir tt. Pagal numatytuosius nustatymus, stulpeliai laikomi atskirtais tarpu arba skirtukais (vadinamasis baltasis tarpas). Taigi, jei įvesties byloje "table1.txt" yra šios eilutės:

1, Justin Timberlake, Titulinis 545, Kaina 7,30 $ 2, Taylor Swift, 723 antraštė, Kaina 7,90 $ 3, Mickas Jaggeris, 610 antraštė, Kaina 7,90 $ 4, Lady Gaga, 118 antraštė, Kaina 7,30 $ 5, Johnny Cash, antraštė 482, kaina 6,50 $ 6, Elvis Presley, antraštė 335, kaina $ 7.30 7, John Lennon, antraštė 271, kaina $ 7.90 8, Michael Jackson, antraštė 373, kaina $ 5.50

Tada komanda parašys šias eilutes į išvesties failą "output1.txt":

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

Jei stulpelių atskyriklis yra kažkas, išskyrus tarpus arba skirtukus, pvz., Kablelį, galite nurodyti, kad aprašyme awk taip:

awk-F, "(spausdinti $ 3)" table1.txt> output1.txt

Pasirinkus elementą iš kiekvienos eilutės 3 stulpelio, jei stulpeliai bus laikomi atskirtais kableliais. Todėl produkcija šiuo atveju būtų:

545 antraštinė dalis 723 antraštė 610 antraštė 118 antraštė 482 antraštė 335 antraštė 271 antraštė 373

Sąrašų sąrašas garbanose skliaustuose ('{', ')') vadinamas bloku. Jei prieš bloką įterpsite sąlyginę išraišką, teiginys bloko viduje bus vykdomas tik tuo atveju, jei sąlyga yra tiesa.

awk '$ 7 == "\ $ 7.30" (print $ 3) "table1.txt

Tokiu atveju sąlyga yra $ 7 == "\ $ 7.30", o tai reiškia, kad elementas 7 stulpelyje yra lygus 7,30 $. Prieš dolerio ženklą grįžtamoji brūkšnys naudojama siekiant išvengti, kad sistema interpretuotų 7 dolerius kaip kintamąjį, o vietoj to paženklins dolerio ženklą.

Taigi šis awk teiginys išspausdina elementą kiekvienos eilutės trečiame stulpelyje, kurio 7 skiltyje yra 7,30 USD.

Taip pat galite naudoti reguliaraus išraišką kaip sąlygą. Pavyzdžiui:

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

Styga tarp dviejų brūkšnių ('/') yra reguliaraus išraiška. Šiuo atveju tai tik eilutė "30." Tai reiškia, kad jei eilutėje yra eilutė "30", sistema išspausdina elementą trečiosios tos eilutės stulpelyje. Pirmiau pateiktame pavyzdyje pateikiama išvada būtų tokia:

Timberlake, Gaga, Presley,

Jei lentelės elementai yra skaičiai awk, jie gali atlikti skaičiavimus, kaip šiame pavyzdyje:

awk "(spausdinti ($ 2 * $ 3) + $ 7)"

Be kintamųjų, kurie turi prieigą prie dabartinės eilutės elementų ($ 1, $ 2 ir tt), yra kintamasis $ 0, kuris nurodo visą eilutę (eilutę) ir kintamąjį NF, kuris priklauso laukų skaičiui.

Taip pat galite nustatyti naujus kintamuosius, kaip šiame pavyzdyje:

awk '(sum = 0; už (col = 1; col <= NF; col ++) sum + = $ col; spausdinimo suma; } '

Tai apskaičiuoja ir spausdina visų elementų kiekvienoje eilutėje sumą.

Awk teiginiai dažnai derinami su sed komandomis .