Kuinka käyttää Awk-tiedostoa kenttien ja sarakkeiden tulostamiseen


Tässä Linux Awk -komentosarjamme osassa tarkastellaan Awkin yhtä tärkeintä ominaisuutta, joka on kenttien muokkaus.

On hyvä tietää, että Awk jakaa automaattisesti sille toimitetut syöttörivit kenttiin, ja kenttä voidaan määritellä joukoksi merkkejä, jotka erotetaan muista kentistä sisäisellä kentän erottimella.

Jos olet perehtynyt Unix/Linuxiin tai teet bash-shell-ohjelmoinnin, sinun tulisi tietää, mikä on sisäisen kentän erotimen (IFS) muuttuja. Oletusarvoinen IFS Awkissa on sarkain ja välilyönti.

Kenttien erottamisen idea toimii Awkissa näin: kun se kohtaa syöttörivin, määritetyn IFS: n mukaan ensimmäinen merkistö on kenttä yksi, johon pääsee käyttämällä $1, toinen merkistö on kenttä kaksi, mikä on käytettävissä käyttäen $2, kolmas merkistö on kenttä kolme, johon pääsee käyttämällä $3 ja niin edelleen viimeiseen merkistöön asti.

Jos haluat ymmärtää tämän Awk-kentän muokkaamisen paremmin, katsokaamme seuraavia esimerkkejä:

Esimerkki 1: Olen luonut tekstitiedoston nimeltä tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

Sitten yritän komentoriviltä tulostaa ensimmäisen, toisen ja kolmannen kentän tiedostosta tecmintinfo.txt alla olevan komennon avulla:

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

TecMint.comisthe

Yllä olevasta lähdöstä näet, että kolmen ensimmäisen kentän merkit tulostetaan IFS: n perusteella, joka on välilyönti:

  1. Kenttään "TecMint.com" pääsee käyttämällä $1 .
  2. Kenttään kaksi, joka on "on", pääsee käyttämällä koodia $2 .
  3. Kenttään kolme, joka on "," pääsee käyttämällä $3 .

Jos olet huomannut tulostetussa tulostuksessa, kentän arvoja ei eroteta toisistaan, ja tulostus käyttäytyy näin oletusarvoisesti.

Jos haluat nähdä lähdön selvästi kenttäarvojen välissä, sinun on lisättävä (,) -operaattori seuraavasti:

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

TecMint.com is the

Yksi tärkeä asia, joka on huomioitava ja joka on aina muistettava, on se, että ($) : n käyttö Awkissa eroaa sen käytöstä komentosarjan komentosarjoissa.

Shell-komentosarjassa ($) käytetään muuttujien arvon käyttämiseen, kun taas Awk ($) -käyttöjärjestelmässä sitä käytetään vain kentän sisältöön, mutta ei muuttujien arvo.

Esimerkki 2: Tarkastellaan yhtä muuta esimerkkiä tiedostolla, joka sisältää useita rivejä nimeltä 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		

Oletetaan, että haluat tulostaa vain Unit_Price kustakin ostoslistan nimikkeestä, sinun on suoritettava seuraava komento:

$ 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

Awkilla on myös printf -komento, joka auttaa muotoilemaan tulosta, on mukava tapa, koska näet, että yllä oleva tulos ei ole riittävän selkeä.

Käyttämällä printf -näppäintä muotoile Tuotteen_nimi ja Yksikköhinta:

$ 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

Yhteenveto

Kenttien muokkaus on erittäin tärkeää, kun Awk-sovellusta käytetään tekstin tai merkkijonojen suodattamiseen. Se auttaa sinua saamaan tiettyjä tietoja luettelon sarakkeisiin. Muista aina, että ($) -operaattorin käyttö Awkissa eroaa shell-komentosarjojen käytöstä.

Toivon, että artikkeli oli hyödyllinen sinulle ja jos tarvitset lisätietoja tai kysymyksiä, voit lähettää kommentin kommenttiosioon.