Jak psát příkazy AWK a skripty

Příkazy, syntaxe a příklady

Příkaz awk je výkonná metoda pro zpracování nebo analýzu textových souborů - zejména datových souborů, které jsou uspořádány podle řádků (řádků) a sloupců.

Jednoduché příkazy awk lze spustit z příkazového řádku . Složitější úlohy by měly být psány jako awk programy (tzv. Awk skripty) do souboru.

Základní formát příkazu awk vypadá takto:

awk 'vzor {action}' vstupní soubor 'výstupní soubor

To znamená: v každém řádku vstupního souboru; pokud řádek obsahuje vzorek, použijte akci na řádek a zadejte výslednou linku do výstupního souboru. Pokud je vzorek vynechán, je akce aplikována na všechny řádky. Například:

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

Toto prohlášení přijímá prvek 5. sloupce každého řádku a zapíše jej jako řádek do výstupního souboru "output.txt". Proměnná '$ 4' odkazuje na druhý sloupec. Podobně můžete přistupovat k prvnímu, druhému a třetímu sloupci pomocí $ 1, $ 2, $ 3 atd. Ve výchozím sloupci se předpokládá, že jsou odděleny mezerami nebo kartami (tzv. Bílý prostor). Takže pokud vstupní soubor "table1.txt" obsahuje tyto řádky:

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 5, Johnny Cash, titul 482, cena $ 6.50 6, Elvis Presley, titul 335, cena 7,30 dolar 7, John Lennon, titul 271, cena $ 7,90 8, Michael Jackson, titul 373, cena $ 5,50

Pak by příkaz zapsal do výstupního souboru "output1.txt" následující řádky:

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

Pokud je oddělovač sloupců něco jiného než mezery nebo karty, například čárka, můžete zadat v příkazu awk následující:

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

Tím se vybere prvek ze sloupce 3 každého řádku, pokud se sloupce považují za oddělené čárkou. Výstupem by proto v tomto případě bylo:

Hlava 545 Název 723 Název 610 Název 118 Titul 482 Název 335 Název 271 Název 373

Seznam příkazů uvnitř konstantních závor ('{', '}') se nazývá blok. Pokud položíte podmíněný výraz před blok, příkaz uvnitř bloku bude proveden pouze v případě, že je podmínka pravdivá.

awk '$ 7 == "\ $ 7,30" {print $ 3}' tabulka1.txt

V tomto případě je podmínka $ 7 == "\ $ 7.30", což znamená, že prvek ve sloupci 7 se rovná 7,30 USD. Zpětné lomítko před znakem dolaru slouží k tomu, aby systém zabránil interpretaci $ 7 jako proměnné a místo toho vzal znak dolaru doslovně.

Takže tento příkaz awk vytiskne prvek ve 3. sloupci každého řádku, který má ve sloupci 7 hodnotu "7,30".

Jako podmínku můžete také používat regulární výrazy . Například:

awk '/ 30 / {tisk $ 3}' tabulka1.txt

Řetězec mezi dvěma lomítky ('/') je regulární výraz. V tomto případě je to pouze řetězec "30." To znamená, že pokud řádek obsahuje řetězec "30", systém vytiskne prvek ve 3. sloupci tohoto řádku. Výstupem ve výše uvedeném příkladu by bylo:

Timberlake, Gaga, Presley,

Pokud jsou tabulkové prvky čísly awk, mohou se na nich spouštět výpočty, jako v tomto příkladu:

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

Kromě proměnných, které přistupují k prvkům aktuálního řádku ($ 1, $ 2 atd.), Existuje proměnná $ 0, která se vztahuje k úplnému řádku (řádku) a proměnné NF, která drží počet polí.

Také můžete definovat nové proměnné jako v tomto příkladu:

awk '{součet = 0; pro (col = 1; col <= NF; col ++) součet + = $ col; tisková suma; } '

To vypočítá a vytiskne součet všech prvků každého řádku.

Příkazy Awk jsou často kombinovány se příkazy sed .