Awk gurlan üýtgeýjileri nähili ulanmalydygyny öwreniň - 10-njy bölüm


Awk aýratynlyklarynyň bölümini açanymyzda, seriýanyň bu bölüminde Awk-da gurlan üýtgeýjiler düşünjesini öwreneris. Awk-da ulanyp boljak üýtgeýjileriň iki görnüşi bar, bular; ulanyjy kesgitlän üýtgeýjiler, 8-nji bölümde we içerki üýtgeýänler.

Gurlan üýtgeýjileriň Awk-da eýýäm kesgitlenen bahalary bar, ýöne şol bahalary üns bilen üýtgedip bileris, gurlan üýtgeýjiler şulary öz içine alýar:

  1. FILENAME : häzirki giriş faýlyň ady (üýtgeýän ady üýtgetmäň)
  2. FR : häzirki giriş çyzygynyň sany (ýagny giriş setiri 1, 2, 3… we ş.m. üýtgeýän ady üýtgetmäň)
  3. NF : häzirki giriş setirindäki meýdanlaryň sany (üýtgeýän ady üýtgetmäň)
  4. OFS : çykyş meýdany bölüji
  5. FS : giriş meýdany bölüji
  6. ORS : çykyş ýazgylaryny bölüji
  7. RS : giriş ýazgylaryny bölüji

Aboveokardaky “Awk” içindäki üýtgeýänleriň käbiriniň ulanylyşyny görkezmäge geçeliň:

Häzirki giriş faýlyň adyny okamak üçin, FILENAME gurlan üýtgeýjini aşakdaky ýaly ulanyp bilersiňiz:

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

Faýlyň adynyň her giriş setiri üçin çap edilendigine düşünersiňiz, gurnalan üýtgeýjini FILENAME ulananyňyzda Awk-iň adaty hereketi.

Giriş faýlyndaky setirleriň (ýazgylaryň) sanyny sanamak üçin NR ulanyp, aşakdaky mysalda görşümiz ýaly boş setirleri hem hasaplaýandygyny ýadyňyzdan çykarmaň.

Domen.txt faýlyny pişik buýrugyny ulanyp görenimizde, tekst bilen 14 setir we boş 2 setir bar:

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

Recordazgyda ýa-da setirde meýdanlaryň sanyny sanamak üçin, NR içindäki üýtgeýjini aşakdaky ýaly ulanýarys:

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

Ondan soň, FS gurlan üýtgeýjini ulanyp, giriş meýdany bölüjisini hem kesgitläp bilersiňiz, Awk giriş setirlerini meýdanlara nädip bölýändigini kesgitleýär.

FS üçin deslapky baha giňişlik we tabdyr, ýöne FS bahasyny Awk-a degişlilikde giriş setirlerini bölmegi görkezjek islendik nyşan bilen üýtgedip bileris.

Muny etmegiň iki usuly bar:

  1. bir usul, FS içindäki üýtgeýjini ulanmakdyr
  2. ikinjisi -F Awk opsiýasyny ulanmak

Linux ulgamynda/etc/passwd faýlyna serediň, bu faýldaky meýdanlar : nyşany bilen bölünýär, şonuň üçin käbir meýdanlary süzmek islänimizde ony täze giriş meýdançasy hökmünde kesgitläp bileris. aşakdaky mysallarda bolşy ýaly:

-F opsiýasyny aşakdaky ýaly ulanyp bileris:

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

Islege görä, aşakdaky ýaly gurlan üýtgeýjiden FS peýdalanyp bileris:

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

Çykyş meýdany bölüjisini kesgitlemek üçin, içindäki üýtgeýjini OFS ulanyň, aşakdaky mysaldaky ýaly ulanýan belgimizi ulanyp, çykyş meýdanlarynyň nähili bölünjekdigini kesgitleýär:

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

Bu bölümiň 10-njy bölüminde öňünden kesgitlenen bahalar bilen gelýän Awk içindäki üýtgeýänleri ulanmak pikirini öwrendik. Emma bu gymmatlyklary hem üýtgedip bileris, ýöne näme edýändigiňizi bilmeseňiz, ýeterlik düşünmek bilen muny etmek maslahat berilmeýär.

Ondan soň, Awk buýruk amallarynda gabyk üýtgeýjilerini nädip ulanyp boljakdygymyzy öwreneris, şonuň üçin Tecmint-e birikdiriň.