Komme i gang med AWK-kommandoen
Awk er et kraftig databehandling programmeringsspråk bygget inn i nesten alle * nix-systemer. Det ser ut som et generelt programmeringsspråk på overflaten, men det er bygget for å ta innspill og kjøre handlinger basert på den innspillingen. Hvis du trenger å behandle tekst basert på visse forhold, vil awk nesten alltid få jobben gjort raskere enn et generelt språk som C. Det tolkes også, slik at du unngår langvarig kompilering og feilsøkingsprosess av kompilerte språk.
Ekstra morsomt faktum : Programmets merkelige navn er en initialisme av programmers navn: Alfred A ho, Peter W einberger, og Brian K ernighan
AWKs grunnleggende syntaks
Når det påkalles på kommandolinjen, følger awk det grunnleggende mønsteret nedenfor:
mønster {action} filmønster {action} fil ...
Awk vil utføre handlingen når mønsteret samsvarer i den angitte filen. Hvis du ikke angir en fil, vil awk kjøre på standardutgangen. Når matchende mønstre, kan awk ta regelmessige uttrykk så vel som programmatisk inngang. La oss vurdere dette grunnleggende eksemplet nedenfor:
awk '/ com / {print $ 0}' e-post
Dette enlinjeprogrammet vil skrive ut hver linje fra filen "e-post" som inneholder tegnene com
. I awk refererer $0
til den nåværende linjen, som også er standard oppførsel. Linjen kunne ha blitt skrevet uten $0,
og den ville ha fungert identisk.
Utskriftsfelt
Fordi awk kan identifisere og analysere felt separatorer, er det nyttig å skrive ut bestemte kolonner eller rader med data. Vi vil bruke filen "/ etc / passwd" for dette eksempelet.
awk -F ":" '{print $ 1}' / etc / passwd
Dette ett-linjeprogrammet gjør noen ting. Flagget -F
indikerer at neste tegn ( :
i dette eksemplet) skal tolkes som feltavskiller. Awk dem skriver ut det første feltet, angitt med $1
.
Vi kan også skrive ut mer enn ett felt om gangen ved å spesifisere feltene i rekkefølge:
awk -F ":" '{print $ 4 "" $ 5}' / etc / passw
Det vil produsere produksjon som ser ut som følgende.
Dette skriver ut det fjerde og femte feltet av passwd
filen med et mellomrom mellom dem. Vær oppmerksom på at mellomrom er mellom dobbelte anførselstegn. Dette spesifiserer det som en bokstavelig karakter i utskriftskommandoen, slik at den skrives ut som skrevet. Vi kan også legge til mer kompliserte bokstaver for å rydde opp produksjonen vår:
awk -F ":" '{print' prosess: "$ 5" \ t \ t "" katalog: "$ 6} '/ etc / passwd
Dette vil skrive ut utskriften med etiketter for identifikasjon. Og vi kan sende alt dette til en ny fil med en caret (>).
awk -F ":" '{print "prosess:" $ 5 "\ t \ t" "katalog:" $ 6}' / etc / passwd> processes.txt
Vi kan kombinere det vi vet så langt for å behandle data mye. For eksempel kan vi bruke vanlige uttrykk for å skrive ut alle linjer fra et dokument som inneholder et gyldig amerikansk telefonnummer.
awk '/ ^(\+\d{1, 2}\s)?\(?\d{3}\)?[\s.-\\{3}[\\\\\{{ } $ / {print} 'kontakter
Utvidelse av Awk-kommandoen er tilsvarende kraft
Awk kan også behandle informasjon ved hjelp av en rekke operander. Dette inkluderer standard operander som ==
, <
, >
, <=
, >=
, og !=
, Samt awk-spesifikke operander ~
og !~,
Som betyr "matcher" og "samsvarer ikke" henholdsvis. Disse operandene brukes når man sammenligner vanlige uttrykk med boolsk logikk, samt flere standardprogrammatiske uttrykk.
AWK Command Eksempler
awk 'lengde ($ 0)> 80' data
Skriver ut alle linjer som er lengre enn åtti tegn i filen "data". Merk mangelen på en utskriftserklæring: i mangel av en spesifisert handling, vil awk skrive ut hele linjen når et mønster samsvarer.
$ 1 == "bruker" {print}
Skriver ut alle linjer der det første feltet er lik strengen "bruker". Uten et -F
flagg, vil awk bruke hvitt mellomrom som standardfelt separator. Vær også oppmerksom på at awk og filen ikke er spesifisert. Dette er for bruk i skript i separate filer, som dekket nedenfor.
$ 5 ~ / root / {print $ 3}
Skriver ut det tredje feltet når det femte feltet samsvarer med det vanlige uttrykket /root/
.
{if ($ 5! ~ / root /) {print $ 3}}
Når felt 5 ikke samsvarer med /root/
, skriv ut felt tre. Dette bruker C-like if
setningen, som også er kompatibel med awk. Dette formatet gir større fleksibilitet for programmerere som er kjent med generelle språk.
Lagre skript i filer
Awk-skript kan også lagres i filer som lar deg lagre mer komplekse programmer:
awk -f ~ / scripts / program.awk data
Når du bruker -f
flagget, kjører awk skriptet i den angitte filbanen, nemlig program.awk
. Kommandoene i det programmet vil behandle filen "data".
Handlinger kan også kjøres før og etter programmet, ved hjelp av BEGIN
og END
:
BEGIN {FS = ":"} # indikerer at: er feltseparatoren for programmet. #operations END {print "Du er ferdig"} # skriver ut en gledelig melding til brukeren
Som du ser ovenfor, starter #
-ikonet en kommentar, som varer til slutten av linjen.
Konklusjon
Denne håndboken berører bare de mest grunnleggende elementene i awk. Det er langt mer å bygge og utforske utover dette. Undersøk GNU-dokumentasjonen for awk eller The Awk Programming Language, og den awk læreboken skrevet av utviklerne av programmet.