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.