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:

  1. FILENAME : aktuellen Input Dateinumm (ännert keng Variabelnumm)
  2. FR : Zuel vun der aktueller Input Linn (dat ass Input Linn 1, 2, 3 ... sou weider, ännert keng Variabelnumm)
  3. NF : Zuel vun de Felder an der aktueller Input Linn (ännert keng Variabelnumm)
  4. OFS : Ausgangsfeldseparator
  5. FS : Input Field Separator
  6. ORS: Ausgangsrekordseparator
  7. RS: 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:

  1. eng Method ass d'FS agebaute Variabel ze benotzen
  2. 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.