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:
- Felt én som er “TecMint.com ” åpnes med
$1
. - Felt to som er “er ” åpnes med
$2
. - 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.