Naučte se používat vestavěné proměnné Awk – část 10
Když odhalíme sekci funkcí Awk, v této části seriálu si projdeme koncept vestavěných proměnných v Awk. V Awk můžete použít dva typy proměnných, tyto jsou; uživatelsky definované proměnné, kterým jsme se věnovali v 8. části, a vestavěné proměnné.
Vestavěné proměnné mají hodnoty již definované v Awk, ale tyto hodnoty můžeme také opatrně změnit. Mezi vestavěné proměnné patří:
FILENAME
: aktuální název vstupního souboru (neměňte název proměnné)FR
: číslo aktuálního vstupního řádku (to je vstupní řádek 1, 2, 3... tak dále, neměňte název proměnné)NF
: počet polí v aktuálním vstupním řádku (neměnit název proměnné)OFS
: oddělovač výstupních políFS
: oddělovač vstupního poleORS
: výstupní oddělovač záznamůRS
: vstupní oddělovač záznamů
Pojďme si ilustrovat použití některých vestavěných proměnných Awk výše:
Chcete-li přečíst název souboru aktuálního vstupního souboru, můžete použít vestavěnou proměnnou FILENAME
takto:
awk ' { print FILENAME } ' ~/domains.txt
Uvědomíte si, že název souboru se vytiskne pro každý vstupní řádek, což je výchozí chování Awk, když používáte vestavěnou proměnnou FILENAME
.
Použití NR
k počítání počtu řádků (záznamů) ve vstupním souboru, pamatujte, že také počítá prázdné řádky, jak uvidíme v příkladu níže.
Když zobrazíme soubor domains.txt pomocí příkazu cat, obsahuje 14 řádků s textem a prázdné 2 řádky:
cat ~/domains.txt
awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
K počítání počtu polí v záznamu nebo řádku používáme vestavěnou proměnnou NR takto:
cat ~/names.txt
awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
Dále můžete také určit oddělovač vstupních polí pomocí vestavěné proměnné FS
, která definuje, jak Awk rozděluje vstupní řádky do polí.
Výchozí hodnota pro FS
je mezera a tab, ale hodnotu FS
můžeme změnit na libovolný znak, který dá Awk pokyn, aby odpovídajícím způsobem rozdělil vstupní řádky.
Existují dva způsoby, jak to udělat:
- jednou z metod je použití vestavěné proměnné FS
- a druhý je vyvolat volbu -F Awk
Zvažte soubor /etc/passwd v systému Linux, pole v tomto souboru jsou rozdělena pomocí znaku :
, takže jej můžeme zadat jako nový oddělovač vstupních polí, když chceme odfiltrovat určitá pole jako v následujících příkladech:
Volbu -F
můžeme použít následovně:
awk -F':' '{ print $1, $4 ;}' /etc/passwd
Volitelně můžeme také využít vestavěnou proměnnou FS
, jak je uvedeno níže:
awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
Chcete-li určit oddělovač výstupních polí, použijte vestavěnou proměnnou OFS
, která definuje, jak budou výstupní pole oddělena pomocí znaku, který použijeme jako v příkladu níže:
awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
V této části 10 jsme prozkoumali myšlenku použití vestavěných proměnných Awk, které přicházejí s předdefinovanými hodnotami. Tyto hodnoty však můžeme také změnit, nedoporučujeme to však dělat, pokud nevíte, co děláte, s dostatečným porozuměním.
Poté postoupíme k tomu, jak můžeme použít proměnné shellu v operacích příkazů Awk, proto zůstaňte ve spojení s Tecmint.