Lær hvordan du bruger Awk-indbyggede variabler - Del 10


Når vi afdækker sektionen af Awk-funktioner, skal vi i denne del af serien gennemgå konceptet med indbyggede variabler i Awk. Der er to typer variabler, du kan bruge i Awk, disse er; brugerdefinerede variabler, som vi dækkede i del 8 og indbyggede variabler.

Indbyggede variabler har allerede definerede værdier i Awk, men vi kan også omhyggeligt ændre disse værdier, de indbyggede variabler inkluderer:

  1. FILENAME : nuværende inputfilnavn (ændrer ikke variabelnavn)
  2. FR : nummeret på den aktuelle inputlinje (dvs. inputlinje 1, 2, 3 ... osv., skift ikke variabelnavn)
  3. NF : antal felter i den aktuelle inputlinje (ændrer ikke variabelnavn)
  4. OFS : outputfeltadskiller
  5. FS : inputfeltadskiller
  6. ORS : udgangspostseparator
  7. RS : indgangspostseparator

Lad os fortsætte med at illustrere brugen af nogle af Awk-indbyggede variabler ovenfor:

For at læse filnavnet på den aktuelle inputfil kan du bruge den indbyggede variabel FILENAME :

$ awk ' { print FILENAME } ' ~/domains.txt 

Du vil indse, at filnavnet udskrives for hver inputlinje, det er Awk's standardadfærd, når du bruger FILENAME indbygget variabel.

Brug NR til at tælle antallet af linjer (poster) i en inputfil, husk at det også tæller de tomme linjer, som vi skal se i eksemplet nedenfor.

Når vi ser filen domains.txt ved hjælp af cat-kommandoen, indeholder den 14 linjer med tekst og tomme 2 linjer:

$ cat ~/domains.txt
$ awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt 

For at tælle antallet af felter i en post eller linje bruger vi den indbyggede NR-variabel som følger:

$ cat ~/names.txt
$ awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt

Dernæst kan du også angive en inputfeltadskiller ved hjælp af den indbyggede variabel FS , den definerer, hvordan Awk deler inputlinjer i felter.

Standardværdien for FS er mellemrum og fane, men vi kan ændre værdien af FS til ethvert tegn, der vil instruere Awk om at opdele inputlinjer i overensstemmelse hermed.

Der er to metoder til at gøre dette:

  1. en metode er at bruge den indbyggede FS-variabel
  2. og det andet er at påkalde indstillingen -F Awk

Overvej filen/etc/passwd på et Linux-system, felterne i denne fil er opdelt ved hjælp af tegnet : , så vi kan angive det som den nye inputfeltadskiller, når vi vil filtrere visse felter ud som i de følgende eksempler:

Vi kan bruge indstillingen -F som følger:

$ awk -F':' '{ print $1, $4 ;}' /etc/passwd

Eventuelt kan vi også udnytte den indbyggede variabel FS som nedenfor:

$ awk ' BEGIN {  FS=“:” ; }  { print $1, $4  ; } ' /etc/passwd

For at specificere en outputfeltadskiller skal du bruge den indbyggede variabel OFS , den definerer, hvordan outputfelterne skal adskilles ved hjælp af det tegn, vi bruger som i eksemplet nedenfor:

$ awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd

I denne del 10 har vi undersøgt ideen om at bruge Awk indbyggede variabler, der kommer med foruddefinerede værdier. Men vi kan også ændre disse værdier, men det anbefales ikke at gøre det, medmindre du ved hvad du laver med tilstrækkelig forståelse.

Efter dette skal vi udvikle os til at dække, hvordan vi kan bruge shellvariabler i Awk-kommandofunktioner, og derfor forblive forbundet til Tecmint.