Naučite se uporabljati vgrajene spremenljivke Awk - 10. del
Ko bomo odkrili odsek funkcij Awk, se bomo v tem delu serije podali skozi koncept vgrajenih spremenljivk v Awk. V programu Awk lahko uporabite dve vrsti spremenljivk, to sta; uporabniško določene spremenljivke, ki smo jih obravnavali v 8. delu in vgrajene spremenljivke.
Vgrajene spremenljivke imajo vrednosti, ki so že določene v programu Awk, vendar jih lahko tudi natančno spremenimo, med vgrajene spremenljivke spadajo:
-
FILENAME
: trenutno ime vhodne datoteke (ne spreminjajte imena spremenljivke) -
FR
: številka trenutne vnosne vrstice (to je vhodna vrstica 1, 2, 3 ... tako naprej, ne spreminjajte imena spremenljivke) -
NF
: število polj v trenutni vnosni vrstici (ne spreminjajte imena spremenljivke) -
OFS
: ločilo izhodnega polja -
FS
: ločilo vnosnega polja -
ORS
: ločilo izhodnih zapisov -
RS
: ločilo vhodnih zapisov
Nadaljujmo s ponazoritvijo uporabe nekaterih vgrajenih spremenljivk Awk zgoraj:
Če želite prebrati ime trenutne vhodne datoteke, lahko uporabite vgrajeno spremenljivko FILENAME
, kot sledi:
$ awk ' { print FILENAME } ' ~/domains.txt
Spoznali boste, da se ime datoteke natisne za vsako vnosno vrstico, kar je privzeto vedenje programa Awk, ko uporabljate vgrajeno spremenljivko FILENAME
.
Z uporabo NR
za štetje števila vrstic (zapisov) v vhodni datoteki ne pozabite, da šteje tudi prazne vrstice, kot bomo videli v spodnjem primeru.
Ko si z ukazom cat ogledamo datoteko domains.txt, vsebuje 14 vrstic z besedilom in prazni dve vrstici:
$ cat ~/domains.txt
$ awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
Za štetje števila polj v zapisu ali vrstici uporabimo vgrajeno spremenljivko NR, kot sledi:
$ cat ~/names.txt
$ awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
Nato lahko z vgrajeno spremenljivko FS
določite ločilo vnosnega polja, ki določa, kako Awk deli vhodne črte na polja.
Privzeta vrednost za FS
sta presledek in zavihek, vendar lahko vrednost FS
spremenimo v kateri koli znak, ki bo Awku naročil, da ustrezno razdeli vhodne vrstice.
To lahko storite na dva načina:
- ena metoda je uporaba vgrajene spremenljivke FS
- in drugi je, da prikličete možnost -F Awk
Razmislite o datoteki/etc/passwd v sistemu Linux, polja v tej datoteki so razdeljena z znakom :
, zato jo lahko določimo kot novo ločilo vhodnih polj, ko želimo nekatera polja filtrirati kot v naslednjih primerih:
Možnost -F
lahko uporabimo na naslednji način:
$ awk -F':' '{ print $1, $4 ;}' /etc/passwd
Po želji lahko izkoristimo tudi vgrajeno spremenljivko FS
, kot spodaj:
$ awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
Če želite določiti ločilo izhodnega polja, uporabite vgrajeno spremenljivko OFS
, ki določa, kako bodo ločena izhodna polja z uporabo znaka, ki ga uporabljamo kot v spodnjem primeru:
$ awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
V tem 10. delu smo raziskali idejo uporabe vgrajenih spremenljivk Awk, ki prihajajo z vnaprej določenimi vrednostmi. Toda te vrednosti lahko tudi spremenimo, vendar tega ni priporočljivo storiti, razen če z ustreznim razumevanjem veste, kaj počnete.
Po tem bomo nadaljevali s tem, kako bomo lahko uporabili spremenljivke lupine v ukaznih operacijah Awk, zato ostajamo povezani s Tecmintom.