Léiert Wéi benotzt Awk Built-in Variablen - Deel 10
Wéi mir d'Sektioun vun Awk Features entdecken, an dësem Deel vun der Serie, wäerte mir duerch d'Konzept vun agebaute Variablen an Awk goen. Et ginn zwou Zorte vu Verännerlechen Dir am Awk benotzen kann, dës sinn; Benotzerdefinéiert Variablen, déi mir am Deel 8 ofgedeckt hunn an agebaute Variablen.
Built-in Variablen hu Wäerter déi schonn an Awk definéiert sinn, awer mir kënnen dës Wäerter och virsiichteg änneren, déi agebaute Variablen enthalen:
FILENAME
: aktuellen Input Dateinumm (ännert keng Variabelnumm)FR
: Zuel vun der aktueller Input Linn (dat ass Input Linn 1, 2, 3 ... sou weider, ännert keng Variabelnumm)NF
: Zuel vun de Felder an der aktueller Input Linn (ännert keng Variabelnumm)OFS
: AusgangsfeldseparatorFS
: Input Field SeparatorORS
: AusgangsrekordseparatorRS
: Input Record Separator
Loosst eis weidergoen fir d'Benotzung vun e puer vun den Awk agebaute Variabelen hei uewen ze illustréieren:
Fir den Dateinumm vun der aktueller Inputdatei ze liesen, kënnt Dir déi agebaute Variabel FILENAME
wéi follegt benotzen:
$ awk ' { print FILENAME } ' ~/domains.txt
Dir wäert feststellen datt de Dateinumm fir all Input Linn gedréckt gëtt, dat ass de Standardverhalen vun Awk wann Dir FILENAME
agebaute Variabel benotzt.
Benotzt NR
fir d'Zuel vun den Zeilen (Rekord) an enger Inputdatei ze zielen, denkt drun datt et och déi eidel Zeilen zielt, wéi mir am Beispill hei ënnen gesinn.
Wa mir d'Datei domains.txt mat Cat Kommando kucken, enthält se 14 Zeilen mat Text an eidel 2 Zeilen:
$ cat ~/domains.txt
$ awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
Fir d'Zuel vun de Felder an engem Rekord oder Zeil ze zielen, benotze mir d'NR agebaute Variabel wéi follegt:
$ cat ~/names.txt
$ awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
Als nächst kënnt Dir och en Input Feld Separator spezifizéieren mat der FS
agebauter Variabel, et definéiert wéi Awk Input Linnen a Felder opdeelt.
De Standardwäert fir FS
ass Raum an Tab, awer mir kënnen de Wäert vun FS
op all Charakter änneren, deen Awk instruéiert d'Inputlinnen deementspriechend opzedeelen.
Et ginn zwou Methoden fir dëst ze maachen:
- eng Method ass d'FS agebaute Variabel ze benotzen
- an déi zweet ass d'Opruff -F Awk Optioun
Bedenkt d'Datei /etc/passwd op engem Linux System, d'Felder an dëser Datei gi mat dem :
Charakter opgedeelt, sou datt mir et als neien Input Feld Separator kënne spezifizéieren wa mir verschidde Felder wëllen ausfilteren wéi an de folgende Beispiller:
Mir kënnen d'Optioun -F
wéi follegt benotzen:
$ awk -F':' '{ print $1, $4 ;}' /etc/passwd
Optional kënne mir och vun der FS
agebauter Variabel profitéieren wéi hei ënnendrënner:
$ awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
Fir en Ausgangsfeld Separator ze spezifizéieren, benotzt d'OFS
agebaute Variabel, et definéiert wéi d'Ausgabfelder getrennt ginn mat dem Charakter dee mir benotze wéi am Beispill hei ënnen:
$ awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
An dësem Deel 10 hu mir d'Iddi entdeckt fir Awk agebaute Variablen ze benotzen déi mat virdefinéierte Wäerter kommen. Mä mir kënnen och dës Wäerter änneren, obwuel, et ass net recommandéiert dat ze maachen ausser Dir wësst wat Dir maacht, mat adäquate Verständnis.
Duerno wäerte mir Fortschrëtter fir ze decken wéi mir Shellvariablen an Awk Kommandooperatioune benotze kënnen, dofir bleift verbonne mat Tecmint.