Ako písať príkazy AWK a skripty

Príkazy, syntax a príklady

Príkaz awk je výkonná metóda na spracovanie alebo analýzu textových súborov - najmä dátových súborov, ktoré sú usporiadané riadkami (riadkami) a stĺpcami.

Jednoduché príkazy awk možno spustiť z príkazového riadku . Zložité úlohy by mali byť napísané ako programy awk (tzv. Awk skripty) do súboru.

Základný formát príkazu awk vyzerá takto:

awk 'vzor {action}' vstupný súbor 'výstupný súbor

To znamená: vziať každý riadok vstupného súboru; ak riadok obsahuje vzor, ​​použite akciu na riadok a výsledný riadok napíšte do výstupného súboru. Ak je vzor vynechaný, akcia sa aplikuje na všetky riadky. Napríklad:

awk '{print $ 5}' table1.txt 'výstup1.txt

Toto vyhlásenie nadobúda prvok 5. stĺpca každého riadku a zapíše ho ako riadok do výstupného súboru "output.txt". Premenná "$ 4" sa vzťahuje na druhý stĺpec. Podobne môžete pristupovať do prvého, druhého a tretieho stĺpca pomocou $ 1, $ 2, $ 3 atď. Predvolené stĺpce sa považujú za oddelené medzerami alebo kartami (tzv. Biele miesto). Takže ak vstupný súbor "table1.txt" obsahuje tieto riadky:

1, Justin Timberlake, titul 545, cena $ 7.30 2, Taylor Swift, titul 723, cena $ 7.90 3, Mick Jagger, titul 610, cena $ 7.90 4, Lady Gaga, titul 118, cena 7.30 dolárov 5, Johnny Cash, titul 482, 6, Elvis Presley, titul 335, cena 7,30 dolárov 7, John Lennon, titul 271, cena 7,90 dolárov 8, Michael Jackson, titul 373, cena 5,50 dolárov

Potom príkaz napíše nasledujúce riadky do výstupného súboru "output1.txt":

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

Ak je oddeľovač stĺpcov niečo iné ako medzery alebo karty, napríklad čiarka, môžete uviesť v príkaze awk nasledovne:

awk -F, '{print $ 3}' tab1.txt> výstup1.txt

Tým sa vyberie prvok zo stĺpca 3 každého riadku, ak sa stĺpce považujú za oddelené čiarkou. Výstupom by preto v tomto prípade bolo:

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

Zoznam výpisov vo vnútri kužeľových zátvoriek ('{', '}') sa nazýva blok. Ak zadáte podmienený výraz pred blokom, vyhlásenie vo vnútri bloku sa vykoná iba vtedy, ak je podmienka pravdivá.

awk '$ 7 == "\ $ 7,30" {print $ 3}' tabuľka1.txt

V tomto prípade je podmienka $ 7 == "\ $ 7.30", čo znamená, že prvok v stĺpci 7 sa rovná 7,30 USD. Spätné lomítko pred znamienkom dolára sa používa na zabránenie tomu, aby systém interpretoval 7 dolárov ako premennú a namiesto toho vzal znak dolára doslovne.

Toto vyhlásenie awk vytlačí prvok v treťom stĺpci každého riadka, ktorý má v stĺpci 7 hodnotu 7,30 USD.

Môžete tiež použiť regulárne výrazy ako podmienku. Napríklad:

awk '/ 30 / {print $ 3}' tabuľka1.txt

Reťazec medzi dvoma lomkami ('/') je regulárny výraz. V tomto prípade je to len reťazec "30." To znamená, že ak riadok obsahuje reťazec "30", systém vytlačí prvok v 3. stĺpci tohto riadku. Výstup vo vyššie uvedenom príklade by bol:

Timberlake, Gaga, Presley,

Ak sú prvky tabuľky číslom awk, môžu sa na nich spúšťať výpočty, ako v tomto príklade:

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

Okrem premenných, ktoré pristupujú k prvkom aktuálneho riadku ($ 1, $ 2, atď.), Existuje premenná $ 0, ktorá sa vzťahuje na celý riadok (riadok) a premennú NF, ktorá drží počet polí.

Môžete tiež definovať nové premenné ako v tomto príklade:

awk '{sum = 0; pre (col = 1; col <= NF; col ++) suma + = $ col; tlačená suma; } '

Toto vypočíta a vytlačí sumu všetkých prvkov každého riadku.

Príkazy Awk sa často kombinujú s príkazmi sed .