Úvod
gawk příkaz je GNU verze awk. Gawk je výkonný nástroj pro zpracování textu a manipulaci s daty s mnoha funkcemi a praktickým využitím.
Tato příručka vás naučí používat Linux gawk příkaz s příklady.
Předpoklady
- Systém se systémem Linux.
- Přístup k terminálu.
- Textový soubor. Tento výukový program používá soubor people jako příklad.
gawk syntaxe příkazů Linux
Základní gawk syntaxe vypadá takto:
gawk [options] [actions/filters] input_file
Příkaz nelze spustit bez jakýchkoli argumentů. Možnosti nejsou povinné, ale pro gawk k vytvoření výstupu by měla být přiřazena alespoň jedna akce. Akce a filtry jsou různé dílčí příkazy a kritéria výběru, které umožňují gawk pro manipulaci s daty ze vstupního souboru.
Poznámka :Možnosti a akce vložte do jednoduchých uvozovek.
Možnosti gawk
gawk command je díky četným argumentům všestranným nástrojem. S gawk je GNU implementací awk , jsou k dispozici dlouhé možnosti ve stylu GNU. Každá dlouhá možnost má odpovídající krátkou možnost.
Běžné možnosti jsou uvedeny níže:
| Možnost | Popis |
|---|---|
-f program-file , --file program-file | Čte příkazy ze souboru, který slouží jako skript, namísto prvního argumentu v terminálu. |
-F fs , --field-separator fs | Používá předdefinovanou proměnnou fs jako oddělovač vstupního pole. |
-v var=val , --assign var=val | Přiřadí hodnotu proměnné před spuštěním skriptu. |
-b , --characters-as-bytes | Zachází se všemi daty jako s jednobajtovými znaky. |
-c , --traditional | Spustí gawk v režimu kompatibility. |
-C , --copyright | Zobrazí zprávu o autorských právech GNU. |
-d[file] , --dump-variables[=file] | Zobrazuje seznam proměnných, jejich typy a hodnoty. |
-e program-text , --source program-text | Umožňuje míchání funkcí knihovny a zdrojového kódu. |
-E file , --exec file | Vypne přiřazení terminálových proměnných. |
-L [value] , --lint[=value] | Vytiskne varovné zprávy o kódu, který nelze přenést do jiných implementací AWK. |
-S , --sandbox | Spouští gawk v režimu sandbox. |
vestavěné proměnné gawk
gawk příkaz nabízí několik vestavěných proměnných používaných k ukládání a přidávání hodnoty příkazu. Proměnné jsou ovládány z terminálu a ovlivňují program pouze tehdy, když jim uživatel přiřadí hodnotu. Některé důležité gawk vestavěné proměnné jsou:
| Proměnná | Popis |
|---|---|
ARGC | Zobrazuje počet terminálových argumentů. |
ARGIND | Zobrazuje index souboru ARGV. |
ARGV | Představuje pole terminálových argumentů. |
ERRNO | Obsahuje řetězce popisující systémovou chybu. |
FIELDWIDTHS | Zobrazí seznam šířek polí oddělený mezerami. |
FILENAME | Vytiskne název vstupního souboru. |
FNR | Zobrazuje číslo vstupního záznamu. |
FS | Představuje oddělovač vstupního pole. |
IGNORECASE | Zapne nebo vypne vyhledávání rozlišující velká a malá písmena. |
NF | Vytiskne počet polí vstupního souboru. |
NR | Vytiskne aktuální počet řádků souboru. |
OFS | Zobrazí oddělovač výstupních polí. |
ORS | Zobrazuje oddělovač výstupních záznamů. |
RS | Vytiskne oddělovač vstupních záznamů. |
RSTART | Představuje index prvního shodného znaku. |
RLENGTH | Představuje odpovídající délku řetězce. |
Příklady gawk
Použití gawk funkce porovnávání vzorů a zpracování jazyka jsou rozsáhlé. Tento článek si klade za cíl poskytnout praktické příklady, jejichž prostřednictvím se uživatelé naučí používat nástroj gawk.
Důležité: gawk příkaz rozlišuje velká a malá písmena. Použijte IGNORECASE proměnná ignorovat velká a malá písmena.
Tisk souborů
Ve výchozím nastavení gawk s print argument zobrazí každý řádek ze zadaného souboru. Například spuštění příkazu cat na lidech textový soubor vytiskne následující:
gawk příkaz zobrazí stejný výsledek:
gawk '{print}' people
Vytisknout sloupec
V textových souborech se jako oddělovače sloupců obvykle používají mezery. lidé soubor se skládá ze čtyř sloupců:
- Pořadová čísla.
- Křestní jména.
- Příjmení.
- Rok narození.
Použijte gawk zobrazit pouze určitý sloupec v terminálu. Například:
gawk '{print $2}' people
Příkaz vytiskne pouze druhý sloupec. Chcete-li vytisknout více sloupců, například sloupec jedna (řadová čísla) a sloupec dva (křestní jména), spusťte:
gawk '{print $1, $2}' people
gawk příkaz také funguje bez čárky mezi $1 a $2 . Ve výstupu však nejsou žádné mezery mezi sloupci:
gawk '{print $1 $2}' people
Filtrovat sloupce
gawk příkaz nabízí další možnosti filtrování. Například vytiskněte řádky obsahující velké písmeno O s:
gawk '/O/ {print}' people
Chcete-li zobrazit pouze řádky obsahující písmena O nebo A , použijte potrubí:
gawk '/O|A/ {print}' people
Příkaz vytiskne libovolný řádek, který obsahuje slovo s velkým O nebo A . Na druhou stranu použijte logické AND (&& ), aby se zobrazily řádky včetně O a rok 1995 :
gawk '/O/ && /1995/' people
Filtry pracují i s čísly. Například zobrazit pouze osoby narozené v 90. letech s:
gawk '/199*/ {print}' people
Výstup zobrazuje pouze řádky, ve kterých čtvrtý sloupec obsahuje hodnotu 199 .
Přizpůsobte si výstup ještě více kombinací výše uvedených možností. Například tiskněte pouze jména a příjmení osob narozených v 1995 nebo 2003 s:
gawk '/1995|2003/ {print $2, $3}' people
Příkaz vytiskne sloupce dva a tři, jak je uvedeno v {print $2, $3} část. Výstup zobrazuje pouze řádky obsahující čísla 1995 a 2003 , i když jsou sloupce obsahující tato čísla skryté.
gawk příkaz také umožňuje uživatelům tisknout vše kromě řádků obsahujících zadaný řetězec s logickým NOT (! ). Vynechejte například řádky obsahující řetězec 19 ve výstupu:
gawk '!/19/' people
Přidat čísla řádků
lidé soubor obsahuje čísla řádků v prvním sloupci. V případě, že uživatelé pracují na souboru bez čísel řádků, gawk nabízí možnosti jejich přidání.
Například lidé soubor neobsahuje žádná pořadová čísla:
Chcete-li přidat čísla řádků, spusťte gawk s FNR a next :
gawk '{ print FNR, $0; next}' humans
Příkaz přidá před každý řádek číslo řádku. Stejného výsledku je dosaženo s NR proměnná:
gawk '{print NR, $0}' mobile.txt
Najít počet řádků
Chcete-li spočítat celkový počet řádků v souboru, použijte END a NR proměnná s gawk :
gawk 'END { print NR }' people
Příkaz přečte každý řádek. Jednou gawk dosáhne END , vypíše hodnotu NR - který obsahuje celkový počet řádků. Spuštění stejného příkazu bez END výpis vypíše pouze hodnotu NR - počet řádků:
Filtrovat čáry podle délky
Chcete-li tisknout pouze řádky delší než 20 znaků, použijte následující volbu příkazu:
gawk 'length>20' people
Pracuje také s více argumenty. Zobrazte například řádky delší než 17 ale kratší než 20 znaky:
gawk 'length<20 && length>17' people
Chcete-li zobrazit řádky, které mají přesně 20 znaků, spusťte:
gawk 'length==20' people
Tisk informací na základě podmínek
gawk příkaz umožňuje použití příkazů if-else. Například další způsob, jak filtrovat pouze osoby narozené po 1999 je s jednoduchým příkazem if:
gawk '{ if ($4>1999) print }' people
Příkaz if nastavuje podmínku, že položky ve čtvrtém sloupci musí být větší než 1999 . Výstup zobrazuje pouze položky, které splňují podmínku. Rozbalte příkaz do příkazu if-else a vytiskněte řádky, které nesplňují původní podmínku.
gawk '{if ($4>1999) print $0," ==>00s"; else print $0, "==>90s"}' people
Příkaz obsahuje:
- Příkaz If. Pokud je podmínka splněna,
gawkpřidá řetězec „==>90s " na výstupní řádek. - Jiné prohlášení. V případě, že řádek nesplňuje podmínku,
gawkstále vytiskne tento řádek ve výstupu a přidá „==>00s "" na výstup.
Přidat záhlaví
Stejným způsobem jako END umožňuje uživatelům upravit výstup na konci souboru, BEGIN příkaz formátuje data na začátku.
Při použití s awk , BEGIN sekce se vždy provádějí jako první. Poté awk provede zbývající řádky. Jeden způsob použití BEGIN je přidat záhlaví k výstupu.
Provedením následujícího příkazu přidejte sekci nad awk výstup:
gawk 'BEGIN {print "No/First&Last Name/Year of Birth"} {print $0}' people
Najděte nejdelší délku čáry
Zkombinujte předchozí argumenty s if a END příkazy najít nejdelší řádek v lidech soubor:
gawk '{ if (length($0) > max) max = length($0) } END { print max }' people
Zjistěte počet polí
gawk také umožňuje uživatelům zobrazit počet polí s NF variabilní. Nejjednodušší způsob, jak zobrazit počet polí, vytiskne obtížně čitelný výstup:
gawk '{print NF}' people
Příkaz vypíše počet polí na řádek bez dalších informací. Chcete-li přizpůsobit výstup a učinit jej čitelnějším pro člověka, upravte počáteční příkaz:
gawk '{print NR, "-->", NF}' people
Příkaz nyní obsahuje:
NRproměnná, která ke každému výstupnímu řádku přidává čísla řádků.-->řetězec, který odděluje čísla řádků od čísel polí.
Další způsob, jak zobrazit čísla řádků a polí v lidech soubor má tisknout sloupce s NF . Všimněte si, že lidé soubor obsahuje v prvním sloupci pořadová čísla. Proto NR proměnná je vynechána:
gawk '{print $0, "-->", NF}' people
Nakonec, chcete-li vytisknout celkový počet polí, proveďte:
gawk '{num_fields = num_fields + NF} END {print num_fields}' people
Soubor má deset řádků a čtyři sloupce. Výstup je tedy správný.
Závěr
Poté, co si projdete tento tutoriál, víte, jak používat gawk pro pokročilé zpracování textu a manipulaci s daty.
Zvažte také použití grep, mocného linuxového nástroje pro vyhledávání řetězců, slov a vzorů.