Verktøyene Linux -tilbudet følger ofte UNIX -filosofien om design. Ethvert verktøy skal være lite, bruk ren tekst for I/O, og operere på en modulær måte. Takket være arven har vi noen av de fineste tekstbehandlingsfunksjonalitetene ved hjelp av verktøy som SED og AWK.
I Linux kommer AWK-verktøyet forhåndsinstallert på alle Linux-distros. AWK i seg selv er et programmeringsspråk. AWK -verktøyet er bare en tolk av AWK -programmeringsspråket. I denne guiden, sjekk ut hvordan du bruker AWK på Linux.
Awk bruk
AWK -verktøyet er mest nyttig når tekster er organisert i et forutsigbart format. Det er ganske bra til å analysere og manipulere tabelldata. Den fungerer på linje-for-linje, på hele tekstfilen.
Standardoppførselen til AWK er å bruke Whitespaces (mellomrom, faner osv.) for å skille felt. Heldigvis følger mange av konfigurasjonsfilene på Linux dette mønsteret.
Grunnleggende syntaks
Slik ser kommandostrukturen til AWK ut.
$ awk '// ; ; '
Delene av kommandoen er ganske selvforklarende. AWK kan operere uten søk eller handlingsdel. Hvis ingenting er spesifisert, vil standardhandlingen på kampen bare utskrift. I utgangspunktet vil AWK skrive ut alle kampene som finnes på filen.
Hvis det ikke er noen spesifisert søkemønster, vil AWK utføre de spesifiserte handlingene på hver eneste linje i filen.
Hvis begge delene er gitt, vil AWK bruke mønsteret for å avgjøre om den nåværende linjen gjenspeiler det. Hvis matchet, utfører AWK den spesifiserte handlingen.
Merk at AWK også kan fungere på omdirigerte tekster. Dette kan oppnås ved å pipere innholdet i kommandoen til AWK for å handle på. Lær mer om Linux Pipe -kommandoen.
For demoformål, her er en eksempler på tekstfil. Den inneholder 10 linjer, 2 ord per linje.
$ katteprøve.tekst
Vanlig uttrykk
En av nøkkelfunksjonene som gjør AWK til et kraftig verktøy er støtten til vanlig uttrykk (Regex, for kort). Et vanlig uttrykk er en streng som representerer et visst mønster av karakterer.
Her er en liste over noen av de vanligste syntaksene for vanlige uttrykk. Disse regex -syntaksene er ikke bare unike for AWK. Dette er nesten universelle regex -syntaks, så det å mestre dem vil også hjelpe i andre apper/programmering som innebærer regelmessig uttrykk.
Skrive ut teksten
For å skrive ut alt innholdet i en tekstfil, bruk utskriftskommandoen. Når det gjelder søkemønsteret, er det ikke noe mønster definert. Så, AWK skriver ut alle linjene.
$ awk 'print' prøve.tekst
Her er "Print" en AWK -kommando som skriver ut innholdet i inngangen.
Strengsøk
AWK kan utføre et grunnleggende tekstsøk på den gitte teksten. I mønsterdelen må det være teksten å finne.
I den følgende kommandoen vil AWK søke etter teksten "rask" på alle linjene i filprøven.tekst.
$ awk '/hurtig/' prøve.tekst
La oss nå bruke noen vanlige uttrykk for å finjustere søket ytterligere. Følgende kommando vil skrive ut alle linjene som har "brune" i begynnelsen.
$ awk '/^brun/' prøve.tekst
Hva med å finne noe på slutten av en linje? Følgende kommando vil skrive ut alle linjene som har "raske" på slutten.
$ awk '/hurtig $/' prøve.tekst
Wild Card -mønster
Det neste eksemplet kommer til å vise frem bruken av karetten (.). Her kan det være noen to tegn før karakteren "e".
$ awk '/… e/' prøve.tekst
Wild Card Pattern (ved hjelp av Asterisk)
Hva om det kan være et hvilket som helst antall tegn på stedet? For å matche for enhver mulig karakter i stillingen, bruk stjerne (*). Her vil AWK matche alle linjene som har noen mengder tegn etter “The”.
$ awk '/*/' -prøven.tekst
Brakettuttrykk
Følgende eksempel kommer til å vise hvordan du bruker brakettuttrykket. Bracket Expression forteller at på stedet vil kampen være gyldig hvis den samsvarer med settet med tegn som er omsluttet av parentesene. For eksempel vil følgende kommando samsvare med “The” og “Tee” som gyldige kamper.
$ awk '/t [he] e/' prøve.tekst
Det er noen forhåndsdefinerte karaktersett i det vanlige uttrykket. For eksempel er settet med alle store bokstaver merket som "A-Z". I den følgende kommandoen vil AWK samsvare med alle ordene som inneholder en store bokstaver.
$ awk '/[a-z]/' prøve.tekst
Ta en titt på følgende bruk av karaktersett med brakettuttrykk.
AWK forhåndsdefinerte variabler
AWK kommer med en haug med forhåndsdefinerte og automatiske variabler. Disse variablene kan lage skriveprogrammer og skript med AWK enklere.
Her er noen av de vanligste AWK -variablene du kommer over.
La oss sjekke dem i aksjon. Følgende kommando vil bruke NR -variabelen til utskriftslinje 2 til linje 4 fra prøven.tekst. AWK støtter også logiske operatører som Logical og (&&).
$ awk 'nr> 1 && nr < 5' sample.txt
For å tilordne en spesifikk verdi til en AWK -variabel, bruk følgende struktur.
$ awk '// ; ; '= ,
For eksempel for å fjerne alle de blanke linjene fra inndatafilen, endre verdien av RS til i utgangspunktet ingenting. Det er et triks som bruker en uklar posix -regel. Den spesifiserer at hvis verdien av RS er en tom streng, så blir poster separert med en sekvens som består av en ny linje med en eller flere blanke linjer. I posix er en tom linje uten innhold helt tom. Imidlertid, hvis linjen inneholder hvitespasninger, regnes den ikke som "blank".
$ awk 'print' rs = "prøve.tekst
Tilleggsressurser
AWK er et kraftig verktøy med mange funksjoner. Mens denne guiden dekker mange av dem, er det fortsatt bare det grunnleggende. Mestring av AWK vil ta mer enn bare dette. Denne guiden skal være en fin introduksjon til verktøyet.
Hvis du virkelig vil mestre verktøyet, er her noen ekstra ressurser du bør sjekke ut.
Internett er et ganske bra sted å lære noe. Det er mange fantastiske opplæringsprogrammer om AWK -grunnleggende for veldig avanserte brukere.
Endelig tanke
Forhåpentligvis bidro denne guiden til å gi en god forståelse av det grunnleggende AWK. Selv om det kan ta en stund, er det å mestre AWK ekstremt givende når det gjelder kraften det gir.
Glad databehandling!