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í souborTo 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.txtToto 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,50Pak 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.txtTí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 373Seznam 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.txtV 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 .