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:
- Prvo polje koje je “TecMint.com ” se pristupa pomoću
$1
. - Polju dva koje je “je ” pristupa se pomoću
$2
. - 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.