Tento článek je součástí právě probíhající série příkladů výukových programů Awk. V našich dřívějších článcích o awk jsme diskutovali o tisku awk, uživatelsky definovaných proměnných awk a vestavěných proměnných awk.
Jako každý jiný programovací jazyk má i Awk mnoho operátorů pro operace s čísly a řetězci. V tomto článku si proberme všechny klíčové operátory awk .
V Awk existují dva typy operátorů.
- Unární operátor – Operátor, který přijímá jeden operand, se nazývá unární operátor.
- Binární operátor – Operátor, který přijímá více než jeden operand, se nazývá binární operátor.
Awk Unary Operator
| Operátor | Popis |
| + | Zvyšte číslo |
| – | Negujte číslo |
| ++ | Automatické zvýšení |
| — | Automatické snížení |
Awk binární operátor
V Awk jsou k dispozici různé druhy binárních operátorů. Je klasifikován na základě jeho použití.
Awk aritmetické operátory
Pro provádění aritmetických výpočtů se používají následující operátory.
| Operátor | Popis |
| + | Dodatek |
| – | Odčítání |
| * | Násobení |
| / | Divize |
| % | Divize Modulo |
Operátor řetězce Awk
Pro zřetězení řetězců má Awk následující operátory.
| Operátor | Popis |
| (mezera) | Zřetězení řetězců |
Operátoři přiřazení Awk
Awk má operátor přiřazení a operátor přiřazení zkratky, jak je uvedeno níže.
| Operátor | Popis |
| = | Úkol |
| += | Přiřazení přidání zkratky |
| -= | Zkratka přiřazení odečítání |
| *= | Přiřazení zkratky násobení |
| /= | Přiřazení dělení zkratek |
| %= | Zkratka přiřazení dělení modulo |
Awk podmíněné operátory
Awk má následující seznam podmíněných operátorů, které lze použít s řídicími strukturami a cyklickým příkazem, které budou popsány v následujícím článku.
| Operátor | Popis |
| > | Je větší než |
| >= | Je větší nebo rovno |
| < | Je menší než |
| <= | Je menší nebo rovno |
| <= | Je menší nebo rovno |
| == | Je rovno |
| != | Není rovno |
| && | Oba podmíněné výrazy by měly být pravdivé |
| || | Jakýkoli z podmíněných výrazů by měl být pravdivý |
Awk Operátor regulárních výrazů
| Operátor | Popis |
| ~ | Operátor shody |
| !~ | Žádný operátor shody |
Příklady operátorů Awk
Nyní se podívejme na některé příklady, které používají operátory awk. V těchto příkladech použijme jako vstupní soubor /etc/passwd.
$ cat /etc/passwd gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false saned:x:110:116::/home/saned:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Awk Příklad 1:Spočítejte celkový počet polí v souboru.
Níže uvedený skript awk odpovídá všem řádkům a neustále přidává počet polí v každém řádku pomocí operátoru přiřazení zkratky. Počet dosud zobrazených polí je uložen v proměnné s názvem „celkem“. Po zpracování vstupu se provede speciální vzor ‚END {…}‘, který vytiskne celkový počet polí.
$ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd
49 Awk příklad 2:Spočítejte počet uživatelů, kteří používají /bin/sh shell
V níže uvedeném skriptu awk odpovídá poslednímu poli všech řádků obsahujících vzor /bin/sh. Regulární výraz by měl být uzavřen mezi //. Takže všechna přední lomítka(/) musí být v regulárním výrazu escapována. Když se řádek shoduje s proměnnou ‚n‘, zvýší se o jedničku. Vytištěna hodnota 'n' v sekci END.
$ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd
2 Příklad Awk 3:Najděte podrobnosti o uživateli, který má nejvyšší USER ID
Níže uvedený skript awk sleduje největší číslo v poli v proměnné ‚maxuid‘ a odpovídající řádek bude uložen v proměnné ‚maxline‘. Jakmile zacyklí všechny řádky, vytiskne je.
$ awk -F ':' '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd
112 gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false Příklad Awk 4:Tisk sudých řádků
Níže uvedený skript awk zpracuje každý řádek a zkontroluje NR % 2 ==0, tj. pokud je NR násobkem 2. Provede výchozí operaci, která vytiskne celý řádek.
$ awk 'NR % 2 == 0' /etc/passwd libuuid:x:100:101::/var/lib/libuuid:/bin/sh hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
Příklad Awk 5. Vytiskněte každý řádek, který má stejné USER ID a GROUP ID
Níže uvedený skript awk vytiskne řádek pouze v případě, že se $3 (ID UŽIVATELE) a $4 (ID skupiny) rovnají. Kontroluje tuto podmínku pro každý řádek vstupu, pokud se shoduje, vytiskne celý řádek.
$awk -F ':' '$3==$4' passwd.txt gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
Příklad Awk 6:Tisk podrobností o uživateli, který má USER ID větší nebo rovno 100 a který musí používat /bin/sh
V níže uvedeném příkazu Awk jsou dva podmíněné výrazy, jeden je ID uživatele ($3) větší nebo rovno 100 a druhý je poslední pole, které by se mělo shodovat s /bin/sh , '&&' se vytiskne pouze v případě, že oba výše uvedené podmínky jsou pravdivé.
$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Příklad Awk 7:Tisk údajů o uživateli, který nemá komentáře v souboru /etc/passwd
Níže uvedený skript Awk přečte každý řádek a zkontroluje, zda je páté pole prázdné, pokud je prázdné, řádek vytiskne.
$awk -F ':' '$5 == "" ' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false saned:x:110:116::/home/saned:/bin/false
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 svou práci 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.