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:
- Prvom polju koje je "TecMint.com" pristupa se pomoću
$1
. - Polju dva koje je "je" pristupa se pomoću
$2
. - 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.