Kako koristiti Awk za štampanje polja i kolona u datoteci


U ovom dijelu naše serije Linux Awk komandi, pogledat ćemo jednu od najvažnijih karakteristika Awka, a to je uređivanje polja.

Dobro je znati da Awk automatski dijeli ulazne linije koje su mu dostavljene u polja, a polje se može definirati kao skup znakova koji su odvojeni od drugih polja internim separatorom polja.

Ako ste upoznati sa Unix/Linuxom ili radite bash shell programiranje, onda bi trebali znati šta je varijabla internog separatora polja (IFS). Zadani IFS u Awk-u su tab i razmak.

Ovako funkcionira ideja odvajanja polja u Awk: kada naiđe na ulaznu liniju, prema definiranom IFS-u, prvi skup znakova je polje jedan, kojem se pristupa pomoću $1<, drugi skup znakova je polje dva, kojem se pristupa pomoću $2, treći skup znakova je polje tri, kojem se pristupa pomoću $3 i tako dalje do posljednjeg skupa znakova.

Da bismo bolje razumjeli ovo uređivanje Awk polja, pogledajmo primjere u nastavku:

Primjer 1: Kreirao sam tekstualnu datoteku pod nazivom tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Zatim iz komandne linije pokušavam ispisati prvo, drugo i treće polja iz datoteke tecmintinfo.txt > koristeći naredbu ispod:

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

TecMint.comisthe

Iz gornjeg izlaza možete vidjeti da su znakovi iz prva tri polja ispisani na osnovu IFS definiranog što je razmak:

  1. Prvo polje koje je “TecMint.com ” se pristupa pomoću $1.
  2. Polju dva koje je “je ” pristupa se pomoću $2.
  3. Polju tri koje je ““ pristupa se pomoću $3.

Ako ste primijetili u odštampanom izlazu, vrijednosti polja nisu odvojene i ovako se print ponaša po defaultu.

Da biste jasno vidjeli izlaz s razmakom između vrijednosti polja, morate dodati (,) operator na sljedeći način:

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

TecMint.com is the

Jedna važna stvar koju treba napomenuti i uvijek zapamtiti je da se upotreba ($) u Awk razlikuje od upotrebe u shell skriptovima.

Pod shell skriptiranjem ($) se koristi za pristup vrijednosti varijabli, dok se u Awk ($) koristi samo kada se pristupa sadržaju polje, ali ne i za pristup vrijednosti varijabli.

Primjer 2: Pogledajmo još jedan primjer koristeći datoteku koja sadrži više redova pod nazivom 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		

Recimo da želite samo odštampati Unit_Price svake stavke na listi za kupovinu, morat ćete pokrenuti naredbu ispod:

$ 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

Awk također ima naredbu printf koja vam pomaže da formatirate svoj izlaz je lijep način jer možete vidjeti da gornji izlaz nije dovoljno jasan.

Korištenje printf za formatiranje izlaza Item_Name i Unit_Price:

$ 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

Sažetak

Uređivanje polja je veoma važno kada koristite Awk za filtriranje teksta ili nizova, pomaže vam da dobijete određene podatke u kolonama na listi. I uvijek zapamtite da je upotreba ($) operatora u Awk različita od one u shell skriptiranju.

Nadam se da vam je članak bio od pomoći i za sve potrebne dodatne informacije ili pitanja možete ostaviti komentar u odjeljku za komentare.