Aflați cum să utilizați variabilele încorporate Awk - Partea 10


Pe măsură ce descoperim secțiunea caracteristicilor Awk, în această parte a seriei, vom parcurge conceptul de variabile încorporate în Awk. Există două tipuri de variabile pe care le puteți utiliza în Awk, acestea sunt; Variabilele definite de utilizator, pe care le-am acoperit în Partea 8 și variabilele încorporate.

Variabilele încorporate au valori deja definite în Awk, dar putem modifica cu atenție acele valori, variabilele încorporate includ:

  1. FILENAME : numele curent al fișierului de intrare (nu schimbați numele variabilei)
  2. FR : numărul liniei de intrare curente (adică linia de intrare 1, 2, 3... așa mai departe, nu schimbați numele variabilei)
  3. NF : numărul de câmpuri din linia de intrare curentă (nu modificați numele variabilei)
  4. OFS : separator de câmpuri de ieșire
  5. FS : separator de câmpuri de intrare
  6. ORS : separator de înregistrări de ieșire
  7. RS : separator de înregistrare de intrare

Să continuăm să ilustrăm utilizarea unora dintre variabilele încorporate Awk de mai sus:

Pentru a citi numele fișierului de intrare curent, puteți utiliza variabila încorporată FILENAME după cum urmează:

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

Veți realiza că, numele fișierului este tipărit pentru fiecare linie de intrare, acesta este comportamentul implicit al Awk atunci când utilizați variabila încorporată FILENAME.

Folosind NR pentru a număra numărul de linii (înregistrări) dintr-un fișier de intrare, rețineți că, numără și liniile goale, așa cum vom vedea în exemplul de mai jos.

Când vedem fișierul domains.txt folosind comanda cat, acesta conține 14 linii cu text și 2 linii goale:

cat ~/domains.txt

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

Pentru a număra numărul de câmpuri dintr-o înregistrare sau linie, folosim variabila încorporată NR după cum urmează:

cat ~/names.txt

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

În continuare, puteți specifica și un separator de câmpuri de intrare folosind variabila încorporată FS, care definește modul în care Awk împarte liniile de intrare în câmpuri.

Valoarea implicită pentru FS este spațiu și tab, dar putem schimba valoarea FS cu orice caracter care va instrui Awk să împartă liniile de intrare în consecință.

Există două metode pentru a face acest lucru:

  1. o metodă este să folosiți variabila încorporată FS
  2. iar al doilea este să invoci opțiunea -F Awk

Luați în considerare fișierul /etc/passwd pe un sistem Linux, câmpurile din acest fișier sunt împărțite folosind caracterul :, astfel încât să îl putem specifica ca noul separator de câmpuri de intrare când dorim să filtram anumite câmpuri ca în următoarele exemple:

Putem folosi opțiunea -F după cum urmează:

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

Opțional, putem profita și de variabila încorporată FS, după cum urmează:

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

Pentru a specifica un separator de câmpuri de ieșire, utilizați variabila încorporată OFS, care definește modul în care câmpurile de ieșire vor fi separate folosind caracterul pe care îl folosim ca în exemplul de mai jos:

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

În această Partea 10, am explorat ideea de a folosi variabilele încorporate Awk care vin cu valori predefinite. Dar putem schimba și aceste valori, totuși, nu este recomandat să faceți acest lucru decât dacă știți ce faceți, cu o înțelegere adecvată.

După aceasta, vom progresa pentru a acoperi modul în care putem folosi variabilele shell în operațiunile de comandă Awk, prin urmare, rămâneți conectat la Tecmint.