Kuidas kasutada Awki failide väljade ja veergude printimiseks


Meie Linux Awk käsusarja selles osas vaatleme Awki ühte olulisemat funktsiooni, milleks on välitöötlus.

On hea teada, et Awk jagab talle sisestatud read automaatselt väljadeks ja välja saab määratleda märkide kogumina, mis eraldatakse teistest väljadest sisemise väljaeraldaja abil.

Kui olete Unixi/Linuxiga tuttav või teete bashi kesta programmeerimist, peaksite teadma, mis on sisevälja eraldaja (IFS) muutuja. Vaikimisi IFS Awkis on tab ja tühik.

Nii töötab välja eraldamise idee Awkis: kui see kohtub sisendjoonega, on vastavalt IFS-ile määratletud esimene tähemärkide komplekt väli üks, millele pääseb juurde $1 abil, teine märkide komplekt on väli kaks, mis juurde pääseb $2 abil, kolmas tähemärkide komplekt on väli 3, millele pääseb ligi $3 ja nii edasi kuni viimase märgimärgini.

Selle Awki välja muutmise paremaks mõistmiseks vaadake allolevaid näiteid:

Näide 1: Olen loonud tekstifaili nimega tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

Seejärel proovin käsurealt printida failist tecmintinfo.txt esimese, teise ja kolmanda välja, kasutades järgmist käsku:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

Ülaltoodud väljundist näete, et esimese kolme välja märgid trükitakse vastavalt IFS-ile, mis on tühik:

  1. Esimesele väljale, mis on\"TecMint.com", pääseb juurde, kasutades $1 .
  2. Väljale 2, mis on\"on", pääseb juurde, kasutades koodi $2 .
  3. Kolmandale väljale, mis on\"the", pääseb juurde, kasutades koodi $3 .

Kui olete seda väljatrükis märganud, ei eraldata välja väärtusi ja prindikäitumine on selline.

Väljundi selgeks kuvamiseks tühiku väärtusega väljade väärtuste vahel peate lisama operaatori (,) järgmiselt:

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Üks oluline asi, mida meeles pidada ja alati meeles pidada, on see, et ($) kasutamine Awkis erineb selle kasutamisest shelliskriptides.

Shelli skripti all kasutatakse ($) muutujate väärtusele ligipääsuks, samas kui Awk ($) kasutatakse seda ainult välja sisule, kuid mitte muutujate väärtus.

Näide 2: Vaatame ühte teist näidet, kasutades faili, mis sisaldab mitut rida nimega my_shoping.list.

No	Item_Name		Unit_Price	Quantity	Price
1	Mouse			#20,000		   1		#20,000
2 	Monitor			#500,000	   1		#500,000
3	RAM_Chips		#150,000	   2		#300,000
4	Ethernet_Cables	        #30,000		   4		#120,000		

Oletame, et soovite printida ainult iga ostunimekirja üksuse Unit_Price , peate käivitama alloleva käsu:

$ awk '//{print $2, $3 }' my_shopping.txt 

Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

Awkil on ka käsk printf , mis aitab teil väljundit vormindada, see on kena viis, kuna näete, et ülaltoodud väljund pole piisavalt selge.

Üksuse ja üksuse_hind väljundi vormindamiseks kasutage printf :

$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 

Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000

Kokkuvõte

Välja redigeerimine on Awki kasutamisel teksti või stringide filtreerimiseks väga oluline, see aitab teil konkreetseid andmeid loendi veergudesse saada. Ja pidage alati meeles, et operaatori ($) kasutamine Awkis erineb shelliskriptide kasutamisest.

Loodan, et artikkel oli teile abiks ja kui vajate lisateavet või küsimusi, võite postitada kommentaari jaotises kommentaari.