Skip to main content

Kaip parašyti AWK komandas ir scenarijus

Anonim

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

Paprasta awk komandas galima 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, 545 antraštė, kaina 7,30 $2, Taylor Swift, 723 antraštė, kaina 7,90 $3, Mick Jagger, antraštė 610, kaina $ 7.904, 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.908, 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štė 723 antraštė 610 antraštė 118 antraštė 482 antraštė 335 antraštė 271 antraštė 373 antraštė

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.