Miten kirjoittaa AWK-komentoja ja komentosarjoja

Komennot, syntaksi ja esimerkit

Awk-komento on tehokas menetelmä tekstitiedostojen käsittelemiseksi tai analysoimiseksi - erityisesti tietolähteiksi, jotka on järjestetty rivillä (rivillä) ja sarakkeilla.

Yksinkertaiset awk- komennot voidaan suorittaa komentoriviltä . Monimutkaisempia tehtäviä tulee kirjoittaa awk-ohjelmiin (ns. Awk-komentosarjat) tiedostoon.

Awk-komennon perusmuoto näyttää tältä:

awk 'malli {action}' input-tiedosto> output-tiedosto

Tämä tarkoittaa: ota syöttötiedoston jokainen rivi; jos rivillä on malli, viedä toiminta viivaan ja kirjoita tuloksena oleva rivi tulosteeseen. Jos kuvio jätetään pois, toiminto kohdistuu kaikkiin riviin. Esimerkiksi:

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

Tämä lausuma ottaa jokaisen rivin viidennen sarakkeen elementin ja kirjoittaa sen rivinä tulostustiedostossa "output.txt". Muuttuja '$ 4' viittaa toiseen sarakkeeseen. Samoin voit käyttää ensimmäistä, toista ja kolmas saraketta $ 1, $ 2, $ 3, jne. Oletuksena sarakkeiden oletetaan erottaa välilyönnillä tai välilehdillä (ns. Valkoinen tila). Joten, jos syöttötiedosto "table1.txt" sisältää seuraavat rivit:

1, Justin Timberlake, osasto 545, hinta 7,30 dollaria 2, Taylor Swift, nimike 723, hinta 7,90 dollaria 3, Mick Jagger, osasto 610, hinta 7,90 dollaria 4, Lady Gaga, nimike 118, hinta 7,30 dollaria 5, Johnny Cash, osasto 482, hinta 6,50 dollaria 6, Elvis Presley, osasto 335, hinta 7,30 dollaria 7, John Lennon, osasto 271, hinta 7,90 dollaria 8, Michael Jackson, osasto 373, hinta 5,50 dollaria

Tällöin komento kirjoittaa seuraavat rivit tulostustiedostoon "output1.txt":

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

Jos sarakeparaattori on jokin muu kuin välilyönti tai välilehti, kuten pilkku, voit määrittää awk-lauseen seuraavasti:

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

Tämä valitsee jokaisen rivin 3 sarakkeen elementin, jos sarakkeiden katsotaan olevan erotettu pilkulla. Siksi tuotos tässä tapauksessa olisi:

Osasto 545 Nimike 723 Osasto 610 Nimike 118 Osasto 482 Osasto 335 Nimike 271 Nimike 373

Kielisten suluissa olevien lausumien luettelo ('{', '}') kutsutaan blokiksi. Jos asetat ehdollisen lausekkeen lohkon eteen, lohkon sisällä oleva lausunto suoritetaan vain, jos ehto on tosi.

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

Tässä tapauksessa ehto on $ 7 == "\ $ 7.30", mikä tarkoittaa, että sarakkeessa 7 oleva elementti on 7,30 dollaria. Dollarin merkkijonon taaksepistettä käytetään estämään järjestelmä tulkitsemasta $ 7 muuttujana ja käyttämään dollarin kirjainta kirjaimellisesti.

Joten tämä awk-lausuma tulostaa kunkin rivin 3. sarakkeessa olevan elementin, jonka sarakkeessa 7 on "7,30 dollaria".

Voit myös käyttää säännöllisiä lausekkeita ehtona. Esimerkiksi:

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

Kahden viilusarjan ('/') välinen merkkijono on säännöllinen lauseke. Tässä tapauksessa se on vain merkkijono "30." Tämä tarkoittaa, että jos rivi sisältää merkkijonoa "30", järjestelmä tulostaa elementin rivin kolmanteen sarakkeeseen. Edellä olevan esimerkin tuotos olisi:

Timberlake, Gaga, Presley,

Jos taulukkoelementit ovat numeroita awk, ne voivat suorittaa laskutoimituksia niissä kuten tässä esimerkissä:

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

Muiden muuttujien lisäksi, jotka käyttävät nykyisen rivin ($ 1, $ 2 jne.) Osia, on muuttuja $ 0, joka viittaa täydelliseen riviin (rivi) ja muuttujaan NF, joka pitää kenttien lukumäärän.

Voit myös määrittää uusia muuttujia, kuten tässä esimerkissä:

awk '{sum = 0; (col = 1; col <= NF; col + + summa + = $ col; tulosta summa; }'

Tämä laskee ja tulostaa kunkin rivin kaikkien elementtien summan.

Awk-lausunnot yhdistetään usein sed-komentoihin .