Tento článek je součástí probíhající série příkladů výukových programů Awk. Awk má několik výkonných vestavěných proměnných. V Awk jsou dva typy vestavěných proměnných.
- Proměnná, která definuje hodnoty, které lze změnit, jako je oddělovač polí a oddělovač záznamů.
- Proměnná, kterou lze použít pro zpracování a sestavy, jako je počet záznamů, počet polí.
1. Awk FS Příklad:Proměnná oddělovače vstupních polí.
Awk čte a analyzuje každý řádek ze vstupu standardně na základě mezery a nastavuje proměnné $1,$2 atd. Proměnná Awk FS se používá k nastavení oddělovače polí pro každý záznam. Awk FS lze nastavit na libovolný jednotlivý znak nebo regulární výraz. Oddělovač vstupních polí můžete použít pomocí jedné z následujících dvou možností:
- Použití volby příkazového řádku -F.
- Awk FS lze nastavit jako normální proměnnou.
Syntax: $ awk -F 'FS' 'commands' inputfilename (or) $ awk 'BEGIN{FS="FS";}'
- Awk FS je libovolný jednotlivý znak nebo regulární výraz, který chcete použít jako oddělovač vstupních polí.
- Awk FS lze změnit libovolněkrát, zachovává si své hodnoty, dokud není explicitně změněn. Pokud chcete změnit oddělovač pole, je lepší jej změnit před přečtením řádku. Takže tato změna ovlivní řádek, který čtete.
Zde je příklad awk FS pro čtení souboru /etc/passwd, který má jako oddělovač pole „:“.
$ cat etc_passwd.awk BEGIN{ FS=":"; print "Name\tUserID\tGroupID\tHomeDirectory"; } { print $1"\t"$3"\t"$4"\t"$6; } END { print NR,"Records Processed"; }
$awk -f etc_passwd.awk /etc/passwd Name UserID GroupID HomeDirectory gnats 41 41 /var/lib/gnats libuuid 100 101 /var/lib/libuuid syslog 101 102 /home/syslog hplip 103 7 /var/run/hplip avahi 105 111 /var/run/avahi-daemon saned 110 116 /home/saned pulse 111 117 /var/run/pulse gdm 112 119 /var/lib/gdm 8 Records Processed
2. Awk OFS Příklad:Výstupní proměnná oddělovače pole
Awk OFS je výstupní ekvivalent proměnné awk FS. Ve výchozím nastavení je awk OFS jedna mezera. Následuje příklad awk OFS.
$ awk -F':' '{print $3,$4;}' /etc/passwd 41 41 100 101 101 102 103 7 105 111 110 116 111 117 112 119
Concatenator v tiskovém příkazu „,“ zřetězí dva parametry s mezerou, která je ve výchozím nastavení hodnotou awk OFS. Hodnota Awk OFS bude tedy vložena mezi pole ve výstupu, jak je uvedeno níže.
$ awk -F':' 'BEGIN{OFS="=";} {print $3,$4;}' /etc/passwd 41=41 100=101 101=102 103=7 105=111 110=116 111=117 112=119
3. Awk RS Příklad:Record Separator variable
Awk RS definuje čáru. Awk standardně čte řádek po řádku.
Vezměme si, že známky studentů jsou uloženy v souboru, každý záznam je oddělen dvojitým novým řádkem a každá pole jsou oddělena znakem nového řádku.
$cat student.txt Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 65 Edwin 2537 78 67 45 Dayan 2415 30 47 20
Nyní níže uvedený skript Awk vytiskne jméno studenta a Rollno z výše uvedeného vstupního souboru.
$cat student.awk BEGIN { RS="\n\n"; FS="\n"; } { print $1,$2; } $ awk -f student.awk student.txt Jones 2143 Gondrol 2321 RinRao 2122 Edwin 2537 Dayan 2415
Ve skriptu student.awk čte detail každého studenta jako jeden záznam, protože awk RS byl přiřazen ke dvojitému znaku nového řádku a každý řádek v záznamu je pole, protože FS je znak nového řádku.
4. Awk ORS Příklad:Výstupní proměnná oddělovače záznamů
Awk ORS je výstupní ekvivalent RS. Každý záznam ve výstupu bude vytištěn s tímto oddělovačem. Následuje příklad awk ORS:
$ awk 'BEGIN{ORS="=";} {print;}' student-marks Jones 2143 78 84 77=Gondrol 2321 56 58 45=RinRao 2122 38 37 65=Edwin 2537 78 67 45=Dayan 2415 30 47 20=
Ve výše uvedeném skriptu jsou všechny záznamy v souboru se známkami studentů odděleny znakem „=“.
5. Awk NR Příklad:Proměnná počtu záznamů
Awk NR udává celkový počet zpracovávaných záznamů nebo číslo řádku. V následujícím příkladu awk NR má proměnná NR číslo řádku, v sekci END awk NR uvádí celkový počet záznamů v souboru.
$ awk '{print "Processing Record - ",NR;}END {print NR, "Students Records are processed";}' student-marks Processing Record - 1 Processing Record - 2 Processing Record - 3 Processing Record - 4 Processing Record - 5 5 Students Records are processed
6. Awk NF Příklad:Počet polí v záznamu
Awk NF poskytuje celkový počet polí v záznamu. Awk NF bude velmi užitečné pro ověření, zda v záznamu existují všechna pole.
Vezměme si soubor se známkami studentů, pro studenty chybí skóre Test3, jak je uvedeno níže.
$cat student-marks Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 Edwin 2537 78 67 45 Dayan 2415 30 47
Následující skript Awk vytiskne číslo záznamu (řádku) a počet polí v tomto záznamu. Takže bude velmi jednoduché zjistit, že chybí skóre Test3.
$ awk '{print NR,"->",NF}' student-marks 1 -> 5 2 -> 5 3 -> 4 4 -> 5 5 -> 4
7. Awk FILENAME Příklad:Název aktuálního vstupního souboru
Proměnná FILENAME udává název čteného souboru. Awk může přijmout určitý počet vstupních souborů ke zpracování.
$ awk '{print FILENAME}' student-marks student-marks student-marks student-marks student-marks student-marks
Ve výše uvedeném příkladu vytiskne FILENAME, tj. studentské známky pro každý záznam vstupního souboru.
8. Awk FNR Příklad:Počet záznamů vzhledem k aktuálnímu vstupnímu souboru
Když awk čte z více vstupního souboru, proměnná awk NR poskytne celkový počet záznamů vzhledem ke všem vstupním souborům. Awk FNR vám poskytne počet záznamů pro každý vstupní soubor.
$ awk '{print FILENAME, FNR;}' student-marks bookdetails student-marks 1 student-marks 2 student-marks 3 student-marks 4 student-marks 5 bookdetails 1 bookdetails 2 bookdetails 3 bookdetails 4 bookdetails 5
Ve výše uvedeném příkladu namísto awk FNR, pokud použijete awk NR, pro podrobnosti o knize souboru získáte 6 až 10 pro každý záznam.
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.