Tgħallem Kif Tuża Varjabbli Inkorporati Awk - Parti 10


Hekk kif niskopru t-taqsima tal-karatteristiċi tal-Awk, f'din il-parti tas-serje, se nimxu permezz tal-kunċett tal-varjabbli integrati f'Awk. Hemm żewġ tipi ta 'varjabbli li tista' tuża f'Awk, dawn huma; varjabbli definiti mill-utent, li koprejna fil-Parti 8 u varjabbli inkorporati.

Il-varjabbli inkorporati għandhom valuri diġà definiti f'Awk, iżda nistgħu wkoll nibdlu bir-reqqa dawk il-valuri, il-varjabbli inkorporati jinkludu:

  1. FILENAME : l-isem tal-fajl tal-input kurrenti( tbiddilx l-isem tal-varjabbli)
  2. FR : in-numru tal-linja tad-dħul kurrenti (jiġifieri l-linja tad-dħul 1, 2, 3... hekk fuq, tibdelx l-isem tal-varjabbli)
  3. NF : in-numru ta' oqsma fil-linja tal-input kurrenti (ma tibdelx l-isem tal-varjabbli)
  4. OFS : separatur tal-kamp tal-ħruġ
  5. FS : separatur tal-qasam tad-dħul
  6. ORS : separatur tar-rekord tal-ħruġ
  7. RS : separatur tar-rekord tad-dħul

Ejja nipproċedu biex nuru l-użu ta 'xi wħud mill-varjabbli Awk built-in hawn fuq:

Biex taqra l-isem tal-fajl tal-fajl tal-input kurrenti, tista' tuża l-varjabbli inkorporat FILENAME kif ġej:

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

Inti tirrealizza li, l-isem tal-fajl huwa stampat għal kull linja ta 'input, jiġifieri l-imġieba default ta' Awk meta tuża FILENAME varjabbli built-in.

Meta tuża NR biex tgħodd in-numru ta 'linji (rekords) f'fajl input, ftakar li, tgħodd ukoll il-linji vojta, kif se naraw fl-eżempju hawn taħt.

Meta naraw il-fajl domains.txt bl-użu tal-kmand tal-qtates, fih 14-il linja bit-test u 2 linji vojta:

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

Biex tgħodd in-numru ta’ oqsma f’rekord jew linja, nużaw il-varjabbli inkorporat NR kif ġej:

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

Sussegwentement, tista 'wkoll tispeċifika separatur tal-kamp ta' input billi tuża l-varjabbli inkorporat FS, tiddefinixxi kif Awk jaqsam il-linji tad-dħul f'oqsma.

Il-valur default għal FS huwa spazju u tab, iżda nistgħu nibdlu l-valur ta 'FS għal kwalunkwe karattru li jagħti struzzjonijiet lil Awk biex jaqsam il-linji ta' input kif xieraq.

Hemm żewġ metodi biex tagħmel dan:

  1. metodu wieħed huwa li tuża l-varjabbli built-in FS
  2. u t-tieni hija li tinvoka l-għażla -F Awk

Ikkunsidra l-fajl /etc/passwd fuq sistema Linux, l-oqsma f'dan il-fajl huma maqsuma bl-użu tal-karattru :, sabiex inkunu nistgħu nispeċifikawha bħala s-separatur il-ġdid tal-field input meta rridu niffiltraw ċerti oqsma bħal fl-eżempji li ġejjin:

Nistgħu nużaw l-għażla -F kif ġej:

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

B'għażla, nistgħu wkoll nieħdu vantaġġ mill-varjabbli inkorporat FS kif ġej:

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

Biex tispeċifika separatur tal-output field, uża l-varjabbli inkorporat OFS, tiddefinixxi kif l-output fields se jiġu separati billi tuża l-karattru li nużaw bħal fl-eżempju hawn taħt:

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

F'din il-Parti 10, esplorajna l-idea li nużaw varjabbli Awk built-in li jiġu b'valuri predefiniti. Iżda nistgħu wkoll nibdlu dawn il-valuri, għalkemm, mhux rakkomandat li tagħmel dan sakemm ma tkunx taf x'qed tagħmel, b'fehim adegwat.

Wara dan, ser nagħmlu progress biex inkopru kif nistgħu nużaw varjabbli tal-qoxra f'operazzjonijiet ta 'kmand Awk, għalhekk, nibqgħu konnessi ma' Tecmint.