Kako koristiti Awk za ispis polja i stupaca u datoteci


U ovom dijelu naše naredbene serije Linux Awk, pogledati ćemo jednu od najvažnijih značajki Awka, a to je uređivanje polja.

Dobro je znati da Awk automatski dijeli pružene ulazne crte na polja, a polje se može definirati kao skup znakova koji su odvojeni od ostalih polja unutarnjim separatorom polja.

Ako ste upoznati s Unixom/Linuxom ili se bavite programiranjem bash shell-a, tada biste trebali znati što je varijabla unutarnjeg separatora polja (IFS). Zadani IFS u Awk su kartica i razmak.

Ovako ideja odvajanja polja djeluje u Awk-u: kada naiđe na ulazni redak, prema definiranom IFS-u, prvi skup znakova je polje jedno kojem se pristupa pomoću $1, drugi skup znakova je polje dva, što pristupa se pomoću $2, treći skup znakova je polje tri, kojem se pristupa pomoću $3 i tako dalje do zadnjeg skupa znakova.

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

Primjer 1: Stvorio sam tekstualnu datoteku nazvanu tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

Zatim iz naredbenog retka pokušavam ispisati prvo, drugo i treće polje iz datoteke tecmintinfo.txt pomoću naredbe u nastavku:

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

TecMint.comisthe

Iz gornjeg izlaza možete vidjeti da se znakovi iz prva tri polja ispisuju na temelju definiranog IFS-a koji je razmak:

  1. Prvom polju koje je "TecMint.com" pristupa se pomoću $1 .
  2. Polju dva koje je "je" pristupa se pomoću $2 .
  3. Trećem polju koje je "the" pristupa se pomoću $3 .

Ako ste primijetili u ispisanom izlazu, vrijednosti polja se ne razdvajaju i tako se prema zadanim postavkama ponaša ispis.

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 imati na umu i uvijek je zapamtite je da se upotreba ($) u Awk razlikuje od njegove upotrebe u skriptiranju ljuske.

U okviru ljuske skriptiranje ($) koristi se za pristup vrijednosti varijabli, dok se u Awk ($) koristi samo za pristup sadržaju polja, ali ne i za pristup vrijednost varijabli.

Primjer 2: Pogledajmo još jedan primjer pomoću datoteke koja sadrži više redaka 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 ste željeli ispisati samo Unit_Price za svaku stavku na popisu za kupnju, morat ćete pokrenuti naredbu u nastavku:

$ 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 pri formatiranju rezultata. To je lijep način jer vidite 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 vrlo važno kada se Awk koristi za filtriranje teksta ili nizova, pomaže vam da dobijete određene podatke u stupcima na popisu. I uvijek imajte na umu da se upotreba ($) operatora u Awk razlikuje od one u shell skriptiranju.

Nadam se da vam je članak bio koristan, a za dodatne informacije ili pitanja možete poslati komentar u odjeljku za komentare.