GNU/Linux >> Znalost Linux >  >> Linux

gawk Linuxový příkaz s příklady

Ú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ů:

  1. Pořadová čísla.
  2. Křestní jména.
  3. Příjmení.
  4. 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, gawk přidá řetězec „==>90s " na výstupní řádek.
  • Jiné prohlášení. V případě, že řádek nesplňuje podmínku, gawk stá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:

  • NR promě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ů.


Linux
  1. Třídit příkaz v Linuxu s příklady

  2. příkaz chattr v Linuxu s příklady

  3. JQ Command v Linuxu s příklady

  1. wc Linux Command s příklady

  2. V příkladech příkazů v Linuxu

  3. soubor Příklady příkazů v Linuxu

  1. Linux řazení příkazů s příklady

  2. 10 Quick Linux Tail Command s příklady

  3. Linux ip příkaz s příklady