Slik bruker du Awk til å skrive ut felt og kolonner i fil


I denne delen av Linux Awk-kommandoserien vår skal vi se på en av de viktigste funksjonene til Awk, som er feltredigering.

Det er godt å vite at Awk automatisk deler inndatalinjer som leveres til den, i felt, og et felt kan defineres som et sett med tegn som er atskilt fra andre felt med en intern feltseparator.

Hvis du er kjent med Unix/Linux eller gjør bash shell-programmering, bør du vite hva intern feltseparator (IFS) variabel er. Standard IFS i Awk er tabulator og mellomrom.

Dette er hvordan ideen om feltseparasjon fungerer i Awk: når den støter på en inndatalinje, i henhold til IFS definert, er det første settet med tegn felt én, som åpnes ved hjelp av $1<, det andre settet med tegn er felt to, som åpnes ved hjelp av $2, det tredje settet med tegn er felt tre, som åpnes med $3 og så videre til siste sett med tegn.

For å forstå denne Awk-feltredigeringen bedre, la oss ta en titt på eksemplene nedenfor:

Eksempel 1: Jeg har laget en tekstfil kalt tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Fra kommandolinjen prøver jeg å skrive ut første, andre og tredje felt fra filen tecmintinfo.txt ved å bruke kommandoen nedenfor:

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

TecMint.comisthe

Fra utdataene ovenfor kan du se at tegnene fra de tre første feltene skrives ut basert på IFS definert som er mellomrom:

  1. Felt én som er “TecMint.com ” åpnes med $1.
  2. Felt to som er “er ” åpnes med $2.
  3. Felt tre som er “the ” åpnes med $3.

Hvis du har lagt merke til i utskriften, er ikke feltverdiene atskilt, og dette er hvordan utskriften oppfører seg som standard.

For å se utdataene tydelig med mellomrom mellom feltverdiene, må du legge til (,)-operatoren som følger:

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

TecMint.com is the

En viktig ting å merke seg og alltid huske er at bruken av ($) i Awk er forskjellig fra bruken i shell-skripting.

Under shell-skripting brukes ($) for å få tilgang til verdien av variabler mens den i Awk ($) bare brukes når du får tilgang til innholdet i et felt, men ikke for å få tilgang til verdien av variabler.

Eksempel 2: La oss ta en titt på et annet eksempel ved å bruke en fil som inneholder flere linjer kalt 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		

Si at du bare ønsket å skrive ut Unit_Price av hver vare på handlelisten, må du kjøre kommandoen nedenfor:

$ 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 har også en printf-kommando som hjelper deg med å formatere utdataene dine. Dette er en fin måte, siden du kan se at utdataene ovenfor ikke er tydelige nok.

Bruke printf til å formatere utdata for Item_Name og 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

Sammendrag

Feltredigering er veldig viktig når du bruker Awk for å filtrere tekst eller strenger, det hjelper deg med å få bestemte data i kolonner i en liste. Og husk alltid at bruken av ($)-operatoren i Awk er forskjellig fra den i shell-scripting.

Jeg håper artikkelen var nyttig for deg, og hvis du trenger ytterligere informasjon eller spørsmål, kan du legge inn en kommentar i kommentarfeltet.