Sådan bruges Awk til at udskrive felter og kolonner i filen


I denne del af vores Linux Awk-kommandaserie skal vi se på en af de vigtigste funktioner i Awk, som er feltredigering.

Det er godt at vide, at Awk automatisk deler inputlinjer, der leveres til det, i felter, og et felt kan defineres som et sæt tegn, der adskilles fra andre felter med en intern feltseparator.

Hvis du er fortrolig med Unix/Linux eller laver bash shell-programmering, skal du vide, hvad IFS-variablen (intern feltseparator) er. Standard IFS i Awk er fane og mellemrum.

Dette er, hvordan ideen om feltadskillelse fungerer i Awk: når den møder en inputlinje, ifølge den definerede IFS, er det første sæt af tegn felt et, som du får adgang til med $ 1, det andet sæt tegn er felt to, hvilket er adgang til ved hjælp af $ 2, det tredje sæt af tegn er felt tre, som der tilgås ved hjælp af $ 3 og så videre indtil det sidste sæt af tegn.

For at forstå denne Awk-feltredigering bedre, lad os se på eksemplerne nedenfor:

Eksempel 1: Jeg har oprettet en tekstfil kaldet tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

Derefter fra kommandolinjen prøver jeg at udskrive det første, andet og tredje felt fra filen tecmintinfo.txt ved hjælp af kommandoen nedenfor:

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

TecMint.comisthe

Fra ovenstående output kan du se, at tegnene fra de første tre felter udskrives baseret på den definerede IFS, som er mellemrum:

  1. Felt et, der er "TecMint.com", åbnes ved hjælp af $ 1 .
  2. Felt to, som er "er", åbnes ved hjælp af $ 2 .
  3. Felt tre, som er "the", åbnes ved hjælp af $ 3 .

Hvis du har bemærket det i den udskrevne udgang, adskilles feltværdierne ikke, og sådan fungerer udskriften som standard.

Hvis du vil se output tydeligt med mellemrum mellem feltværdierne, skal du tilføje (,) operator som følger:

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

TecMint.com is the

En vigtig ting at bemærke og altid huske er, at brugen af ($) i Awk er forskellig fra brugen i shell-scripting.

Under shell-scripting bruges ($) til at få adgang til værdien af variabler, mens det i Awk ($) kun bruges, når man får adgang til indholdet i et felt, men ikke for at få adgang til værdi af variabler.

Eksempel 2: Lad os se på et andet eksempel ved hjælp af en fil, der indeholder flere linjer kaldet 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		

Sig, at du kun ville udskrive Unit_Price af hver vare på indkøbslisten, skal du kø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, der hjælper dig med at formatere din output er en god måde, da du kan se ovenstående output ikke er klar nok.

Brug printf til at formatere output af 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

Resumé

Feltredigering er meget vigtigt, når du bruger Awk til at filtrere tekst eller strenge, det hjælper dig med at få bestemte data i kolonner på en liste. Og husk altid, at brugen af ($) -operatør i Awk er forskellig fra den i shell-scripting.

Jeg håber, at artiklen var nyttigt for dig, og for eventuelle yderligere oplysninger, der kræves eller spørgsmål, kan du sende en kommentar i kommentarsektionen.