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.