GNU/Linux >> Znalost Linux >  >> Linux

Úvodní výukový program Awk – 7 příkladů tisku Awk

Toto je první článek o nové sérii výukových programů awk. V nadcházejících týdnech zveřejníme několik článků o awk, které pokrývají všechny funkce awk s praktickými příklady.

V tomto článku si projdeme základní pracovní metodologii awk spolu se 7 praktickými příklady tisku awk.

Poznámka: Ujistěte se, že jste si prohlédli naši dřívější sérii výukových programů Sed.

Úvod Awk a operace tisku

Awk je programovací jazyk, který umožňuje snadnou manipulaci se strukturovanými daty a generování formátovaných reportů. Awk znamená jména svých autorů „A Ahoj, W einberger a K ernighan“

Awk se většinou používá pro skenování a zpracování vzorů. Prohledá jeden nebo více souborů, aby zjistil, zda obsahují řádky, které odpovídají zadaným vzorům, a poté provede související akce.

Některé z klíčových funkcí Awk jsou:

  • Awk zobrazuje textový soubor jako záznamy a pole.
  • Stejně jako běžný programovací jazyk má Awk proměnné, podmínky a smyčky
  • Awk má aritmetické a řetězcové operátory.
  • Awk může generovat formátované přehledy

Awk čte ze souboru nebo ze svého standardního vstupu a výstupy na standardní výstup. Awk si nerozumí s netextovými soubory.

Syntax:

awk '/search pattern1/ {Actions}
     /search pattern2/ {Actions}' file

Ve výše uvedené syntaxi awk:

  • vyhledávací vzor je regulární výraz.
  • Akce – příkaz(y), které mají být provedeny.
  • V Awk je možných několik vzorů a akcí.
  • soubor – vstupní soubor.
  • Jednoduché uvozovky kolem programu mají zabránit tomu, aby shell neinterpretoval žádný ze svých speciálních znaků.

Awk Working Methodology

  1. Awk čte vstupní soubory jeden řádek po druhém.
  2. Pro každý řádek se shoduje s daným vzorem v daném pořadí, pokud shody provádějí odpovídající akci.
  3. Pokud žádný vzor neodpovídá, nebude provedena žádná akce.
  4. Ve výše uvedené syntaxi jsou buď vyhledávací vzor nebo akce volitelné, nikoli však obojí.
  5. Pokud vyhledávací vzor není zadán, pak Awk provede dané akce pro každý řádek vstupu.
  6. Pokud akce není zadána, vytiskněte všechny řádky, které odpovídají daným vzorům, což je výchozí akce.
  7. Prázdné složené závorky bez jakékoli akce nic nedělají. Nebude provádět výchozí tiskovou operaci.
  8. Každý příkaz v akcích by měl být oddělen středníkem.

Vytvořme soubor zaměstnanec.txt, který má následující obsah, který bude použit v
příkladech uvedených níže.

$cat employee.txt
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Příklad Awk 1. Výchozí chování Awk

Ve výchozím nastavení Awk vytiskne každý řádek ze souboru.

$ awk '{print;}' employee.txt
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Ve výše uvedeném příkladu vzor není uveden. Takže akce jsou použitelné pro všechny řádky.
Tisk akce bez jakéhokoli argumentu standardně vytiskne celý řádek. Takže vytiskne všechny
řádky souboru bez selhání. Akce musí být uzavřeny ve složených závorkách.

Příklad Awk 2. Vytiskněte čáry, které odpovídají vzoru.

$ awk '/Thomas/
> /Nisha/' employee.txt
100  Thomas  Manager    Sales       $5,000
400  Nisha   Manager    Marketing   $9,500

Ve výše uvedeném příkladu vytiskne celý řádek, který se shoduje s „Thomas“ nebo „Nisha“. Má dva vzory. Awk přijímá libovolný počet vzorů, ale každá sada (vzory a jejich odpovídající akce) musí být odděleny novým řádkem.

Příklad Awk 3. Vytiskněte pouze určité pole.

Awk má řadu vestavěných proměnných. Pro každý záznam, tj. řádek, rozdělí záznam standardně oddělený mezerou a uloží jej do proměnných $n. Pokud má řádek 4 slova, bude uložen v $1, $2, $3 a $4. $0 představuje celý řádek. NF je vestavěná proměnná, která představuje celkový počet polí v záznamu.

$ awk '{print $2,$5;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

$ awk '{print $2,$NF;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

Ve výše uvedeném příkladu $2 a $5 představují jméno a plat. Plat můžeme získat také pomocí  $ NF, kde $ NF představuje poslední pole. V tiskovém příkazu „,“ je zřetězení.

Příklad Awk 4. Inicializace a závěrečná akce

Awk má dva důležité vzory, které jsou specifikovány klíčovým slovem BEGIN a END.

Syntax: 

BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }

# is for comments in Awk

Akce specifikované v sekci BEGIN budou provedeny před zahájením čtení řádků ze vstupu.
Akce END budou provedeny po dokončení čtení a zpracování řádků ze vstupu.

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
> {print $2,"\t",$3,"\t",$4,"\t",$NF;}
> END{print "Report Generated\n--------------";
> }' employee.txt
Name	Designation	Department	Salary
Thomas 	 Manager 	 Sales 	         $5,000
Jason 	 Developer 	 Technology 	 $5,500
Sanjay 	 Sysadmin 	 Technology 	 $7,000
Nisha 	 Manager 	 Marketing 	 $9,500
Randy 	 DBA 	 	 Technology 	 $6,000
Report Generated
--------------

Ve výše uvedeném příkladu vytiskne titulek a poslední soubor pro sestavy.

Příklad Awk 5. Najděte zaměstnance, kteří mají ID zaměstnance větší než 200

$ awk '$1 >200' employee.txt
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Ve výše uvedeném příkladu je první pole ($1) id zaměstnance. Pokud je tedy $1 větší než 200, pak proveďte výchozí akci tisku a vytiskněte celý řádek.

Příklad Awk 6. Vytiskněte seznam zaměstnanců technologického oddělení

Nyní je název oddělení k dispozici jako čtvrté pole, takže je třeba zkontrolovat, zda se $4 shodují s řetězcem „Technology“, pokud ano, vytiskněte řádek.

$ awk '$4 ~/Technology/' employee.txt
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
500  Randy   DBA        Technology  $6,000

Operátor ~ slouží k porovnávání s regulárními výrazy. Pokud odpovídá výchozí akci, tj. bude proveden tisk celého řádku.

Příklad Awk 7. Tisk počtu zaměstnanců v technologickém oddělení

Níže uvedený příklad zkontroluje, zda je oddělením Technologie, pokud ano, v akci stačí zvýšit proměnnou počet, která byla inicializována nulou v sekci BEGIN.

$ awk 'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in Technology Dept =",count;}' employee.txt
Number of employees in Tehcnology Dept = 3

Poté na konci procesu vytiskněte hodnotu count, která vám dá počet zaměstnanců v technologickém oddělení.

Doporučená četba

Sed and Awk 101 Hacks, od Rameshe Natarajan . V prostředí UNIX/Linux trávím několik hodin denně a zabývám se textovými soubory (data, konfigurační soubory a soubory protokolu). Sed a Awk používám pro všechny své práce s textem. Na základě mých zkušeností se Sed and Awk jsem napsal e-knihu Sed and Awk 101 Hacks, která obsahuje 101 praktických příkladů různých pokročilých funkcí Sed a Awk, které zlepší váš život v UNIX / Linux. I když Sed and Awk používáte několik let a nečetli jste tuto knihu, udělejte si laskavost a přečtěte si tuto knihu. Budete ohromeni možnostmi nástrojů Sed a Awk.

Další články Awk

  • Awk uživatelem definované proměnné se 3 praktickými příklady
  • 8 výkonných vestavěných proměnných Awk – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
  • 7 příkladů výkonných operátorů Awk (unární, binární, aritmetický, řetězcový, přiřazovací, podmíněný, reg-ex operátory Awk)
  • 4 příklady příkazů Awk If ( if, if else, if else if, :? )
  • Chycen ve smyčce? Příklady Awk While, Do While, For Loop, Break, Continue, Exit

Linux
  1. Linux cd command tutorial pro začátečníky (8 příkladů)

  2. Výukový program Awk:Pochopte proměnné Awk pomocí 3 praktických příkladů

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

  1. 4 Příklady prohlášení Awk If ( if, if else, if else if, :? )

  2. Příklady příkazů awk v Linuxu

  3. awk:příkaz nenalezen

  1. Bash HereDoc výukový program s příklady

  2. Příkaz AWK v Linuxu s příklady

  3. Výukový program příkazu Linux/UNIX Awk s příklady