Skip to content

Jak psát příkazy a skripty AWK

18 de Červen de 2021
graphicsdesigner 56b54f5a5f9b5829f82d3211

Příkaz awk je výkonná metoda pro zpracování nebo analýzu textových souborů. Zejména analyzuje datové soubory, které jsou uspořádány podle řádků (řádků) a sloupců. Jednoduché příkazy awk lze spustit z příkazového řádku. Složitější úkoly by měly být zapsány jako awk programy (nazývané awk skripty) do souboru.

AWK Základy

Základní formát příkazu awk vypadá takto: awk ‚pattern {action}‘ input-file> output-file

To znamená: vezměte každý řádek vstupního souboru; pokud řádek obsahuje vzor, ​​aplikujte akci na řádek a zapište výsledný řádek do výstupního souboru. Pokud je vzor vynechán, akce se použije na všechny řádky. Například: awk ‚{print $ 5}‘ table1.txt> output1.txt

Výše uvedený příkaz přebírá 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 čtvrtý sloupec. Podobně můžete přistupovat k prvnímu, druhému a třetímu sloupci s $ 1, $ 2, $ 3 atd. Ve výchozím nastavení se předpokládá, že sloupce jsou odděleny mezerami nebo tabulátory (tzv. Prázdné znaky). Pokud tedy vstupní soubor „table1.txt“ obsahuje tyto řádky: 1, Justin Timberlake, název 545, cena 7,30 $
2, Taylor Swift, název 723, cena 7,90 $
3, Mick Jagger, hlava 610, cena 7,90 $
4, Lady Gaga, hlava 118, cena 7,30 $
5, Johnny Cash, hlava 482, cena 6,50 $
6, Elvis Presley, název 335, cena 7,30 $
7, John Lennon, hlava 271, cena 7,90 $
8, Michael Jackson, Title 373, Price 5,50 $

Pak by příkaz zapsal následující řádky do výstupního souboru „output1.txt“: 545,
723,
610,
118,
482,
335,
271,
373,

Pokud je oddělovač sloupců něco jiného než mezery nebo tabulátory, například čárka, můžete to v příkazu awk určit takto: awk -F, ‚{print $ 3}‘ table1.txt> output1.txt

Tím se vybere prvek ze sloupce 3 každého řádku, pokud jsou sloupce považovány za oddělené čárkou. Výstupem by tedy v tomto případě bylo: Název 545
Hlava 723
Hlava 610
Hlava 118
Hlava 482
Hlava 335
Hlava 271
Hlava 373

Podmíněné výrazy v AWK

Seznam příkazů uvnitř složených závorek (‚{‚, ‚}‘) se nazývá blok. Pokud před blok umístíte podmíněný výraz, příkaz uvnitř bloku se provede, pouze pokud je podmínka pravdivá. awk ‚$ 7 == “ $ 7,30″ {tisk $ 3}‘ table1.txt

V tomto případě je podmínka $ 7 == “ $ 7,30″, což znamená, že prvek ve sloupci 7 se rovná $ 7,30. Zpětné lomítko před znakem dolaru se používá k zabránění systému interpretovat $ 7 jako proměnnou a místo toho brát znak dolaru doslovně. Tento příkaz awk tedy vytiskne prvek ve 3. sloupci každého řádku, který má ve sloupci 7 „$ 7.30“. Jako podmínku můžete také použít regulární výrazy. Například: awk ‚/ 30 / {print $ 3}‘ table1.txt

Řetězec mezi dvěma lomítky („https://www.zivotdivny.com/“) 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ýstup ve výše uvedeném příkladu by byl: Timberlake,
Senilní,
Presley,

Provádějte výpočty v AWK

Pokud jsou prvky tabulky čísla, awk může na nich spustit výpočty, jako v tomto příkladu: awk ‚{print ($ 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á odkazuje na celý řádek (řádek), a proměnná NF, která drží počet polí. Můžete také definovat nové proměnné jako v tomto příkladu: awk ‚{sum = 0; pro (col = 1; col <= NF; col ++) součet + = $ col; součet tisku; } ‚

Tím se vypočítá a vytiskne součet všech prvků každého řádku. Příkazy AWK jsou často kombinovány s příkazy sed.