Vyhledávání na webu

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ří:

  1. FILENAME : aktuální název vstupního souboru (neměňte název proměnné)
  2. FR : číslo aktuálního vstupního řádku (to je vstupní řádek 1, 2, 3... tak dále, neměňte název proměnné)
  3. NF : počet polí v aktuálním vstupním řádku (neměnit název proměnné)
  4. OFS : oddělovač výstupních polí
  5. FS : oddělovač vstupního pole
  6. ORS : výstupní oddělovač záznamů
  7. 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:

  1. jednou z metod je použití vestavěné proměnné FS
  2. 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.