Paano Sumulat ng AWK Mga Utos at Mga Script

Mga utos, syntax, at mga halimbawa

Ang awk command ay isang malakas na paraan para sa pagproseso o pag-aaral ng mga tekstong file-sa partikular, mga file ng data na nakaayos ayon sa mga linya (mga hilera) at mga haligi.

Ang mga simpleng awk na utos ay maaaring tumakbo mula sa command line . Ang mas kumplikadong mga gawain ay dapat na nakasulat bilang awk programa (tinatawag na awk script) sa isang file.

Ang pangunahing format ng awk command ay ganito:

awk 'pattern {action}' input-file> output-file

Ang ibig sabihin nito: kunin ang bawat linya ng input file; kung ang linya ay naglalaman ng pattern ilapat ang pagkilos sa linya at isulat ang resultang linya sa output-file. Kung ang pattern ay tinanggal, ang aksyon ay inilalapat sa lahat ng linya. Halimbawa:

awk '{print $ 5}' table1.txt> output1.txt

Ang pahayag na ito ay tumatagal ng elemento ng ika-5 na haligi ng bawat linya at isinulat ito bilang isang linya sa output file na "output.txt". Ang variable '$ 4' ay tumutukoy sa pangalawang haligi. Katulad nito maaari mong ma-access ang una, pangalawa, at ikatlong haligi, na may $ 1, $ 2, $ 3, atbp. Sa pamamagitan ng default na mga haligi ay ipinapalagay na ihihiwalay ng mga puwang o mga tab (kaya tinatawag na puting espasyo). Kaya, kung ang input file na "table1.txt" ay naglalaman ng mga linyang ito:

1, Justin Timberlake, Pamagat 545, Presyo $ 7.30 2, Taylor Swift, Pamagat 723, Presyo $ 7.90 3, Mick Jagger, Pamagat 610, Presyo $ 7.90 4, Lady Gaga, Pamagat 118, Presyo $ 7.30 5, Johnny Cash, Pamagat 482, Presyo $ 6.50 6, Elvis Presley, Pamagat 335, Presyo $ 7.30 7, John Lennon, Pamagat 271, Presyo $ 7.90 8, Michael Jackson, Pamagat 373, Presyo $ 5.50

Pagkatapos ay isulat ng command ang mga sumusunod na linya sa output file na "output1.txt":

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

Kung ang column separator ay isang bagay maliban sa mga puwang o mga tab, tulad ng isang kuwit, maaari mong tukuyin na sa awk na pahayag tulad ng sumusunod:

awk -F, '{print $ 3}' table1.txt> output1.txt

Pipili nito ang elemento mula sa haligi 3 ng bawat linya kung ang mga hanay ay itinuturing na pinaghihiwalay ng isang kuwit. Samakatuwid ang output, sa kasong ito, ay magiging:

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

Ang listahan ng mga pahayag sa loob ng kulot na mga bracket ('{', '}') ay tinatawag na isang bloke. Kung naglagay ka ng isang kondisyong pagpapahayag sa harap ng isang bloke, ang pahayag sa loob ng bloke ay isasagawa lamang kung ang kalagayan ay totoo.

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

Sa kasong ito, ang kondisyon ay $ 7 == "\ $ 7.30", na nangangahulugang ang elemento sa haligi 7 ay katumbas ng $ 7.30. Ang backslash sa harap ng dollar sign ay ginagamit upang maiwasan ang sistema sa pagbibigay-kahulugan sa $ 7 bilang isang variable at sa halip kunin ang dollar sign literal.

Kaya ang awk na pahayag na ito ay nagpapalabas ng elemento sa ika-3 hanay ng bawat linya na may "$ 7.30" sa haligi 7.

Maaari mo ring gamitin ang mga regular na expression bilang kondisyon. Halimbawa:

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

Ang string sa pagitan ng dalawang slashes ('/') ay ang regular na expression. Sa kasong ito, ito ay lamang ang string "30." Ang ibig sabihin nito kung ang isang linya ay naglalaman ng string na "30", ang sistema ay nagpapalabas ng elemento sa ika-3 hanay ng linya na iyon. Ang output sa halimbawa sa itaas ay magiging:

Timberlake, Gaga, Presley,

Kung ang mga elemento ng table ay ang mga awk numero ay maaaring magpatakbo ng mga kalkulasyon sa mga ito tulad ng sa halimbawang ito:

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

Bukod sa mga variable na ma-access ang mga elemento ng kasalukuyang hilera ($ 1, $ 2, atbp.) Mayroong variable na $ 0 na tumutukoy sa kumpletong hanay (linya), at ang variable NF na humahawak sa bilang ng mga patlang.

Maaari mo ring tukuyin ang mga bagong variable tulad ng sa halimbawang ito:

awk '{sum = 0; para sa (col = 1; col <= NF; col ++) sum + = $ col; print sum; } '

Iniipon at ini-print ang kabuuan ng lahat ng mga elemento ng bawat hilera.

Ang mga pahayag ng Awk ay madalas na sinamahan ng sed commands .