Awk

Hvordan bruke AWK på Linux

Hvordan bruke AWK på Linux

Verktøyene Linux tilbyr følger UNIX-designfilosofien. Ethvert verktøy skal være lite, bruk vanlig tekst for I / O og fungere på en modulær måte. Takket være arven har vi noen av de fineste tekstbehandlingsfunksjonene ved hjelp av verktøy som sed og awk.

I Linux er awk-verktøyet forhåndsinstallert på alle Linux-distribusjoner. AWK i seg selv er et programmeringsspråk. AWK-verktøyet er bare en tolk av programmeringsspråket AWK. 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 linje for linje på hele tekstfilen.

Standard oppførsel for awk er å bruke mellomrom (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 fungere uten søke- eller handlingsdelen. Hvis ingenting er spesifisert, vil standardhandlingen på kampen bare være utskrift. I utgangspunktet vil awk skrive ut alle treffene som finnes i filen.

Hvis det ikke er angitt noe søkemønster, vil awk utføre de angitte 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å viderekoblede tekster. Dette kan oppnås ved å røre innholdet i kommandoen for å vanskelig å handle. Lær mer om Linux-rørkommandoen.

For demo formål, her er en eksempeltekstfil. 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 regulært uttrykk (regex, for kort). Et vanlig uttrykk er en streng som representerer et bestemt mønster av tegn.

Her er en liste over noen av de vanligste syntaksene for regulære uttrykk. Disse regex-syntakene er ikke bare unike for awk. Dette er nesten universelle regex-syntakser, så å mestre dem vil også hjelpe i andre apper / programmering som innebærer vanlig uttrykk.

  • Grunnleggende tegn: Alle de alfanumeriske tegnene understreker (_) osv.
    • Tegnsett: For å gjøre ting enklere er det tegngrupper i regex. For eksempel store bokstaver (A-Z), små bokstaver (a-z) og numeriske sifre (0-9).
  • Metakarakterer: Dette er tegn som forklarer forskjellige måter å utvide de vanlige karakterene på.
    • Periode (.): Enhver karakterkamp i posisjonen er gyldig (unntatt en ny linje).
    • Stjerne (*): Null eller flere eksistenser av den umiddelbare karakteren før den er gyldige.
    • Brakett ([]): Kampen er gyldig hvis noen av tegnene fra braketten på posisjonen samsvarer. Det kan kombineres med tegnsett.
    • Vaktmester (^): Kampen må være i begynnelsen av linjen.
    • Dollar ($): Kampen må være på slutten av linjen.
    • Backslash (\): Hvis noen metakarakterer må brukes i bokstavelig forstand.

Skrive ut teksten

For å skrive ut alt innholdet i en tekstfil, bruk utskriftskommandoen. Når det gjelder søkemønsteret, er det ikke definert noe mønster. Så awk skriver ut alle linjene.

$ awk 'print' prøve.tekst

Her er "utskrift" en AWK-kommando som skriver ut innholdet på inngangen.

Strengsøk

AWK kan utføre et grunnleggende tekstsøk på den gitte teksten. I mønsterseksjonen må det være teksten å finne.

I den følgende kommandoen vil awk søke etter teksten "rask" på alle linjene i fileksemplet.tekst.

$ awk '/ quick /' 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 "brun" i begynnelsen.

$ awk '/ ^ brown /' prøve.tekst

Hva med å finne noe på slutten av en linje? Følgende kommando vil skrive ut alle linjene som har "rask" på slutten.

$ awk '/ rask $ /' prøve.tekst

Wild card mønster

Det neste eksemplet skal vise frem bruken av salvet (.). Her kan det være to tegn før tegnet “e”.

$ awk '/… e /' prøve.tekst

Wild card mønster (ved hjelp av stjerne)

Hva om det kan være et hvilket som helst antall tegn på stedet? For å matche for et mulig tegn på posisjonen, bruk stjernen (*). Her vil AWK matche alle linjene som har en mengde tegn etter "the".

$ awk '/ * /' prøven.tekst

Brakettuttrykk

Følgende eksempel skal vise hvordan du bruker parentesuttrykket. Brakettuttrykk forteller at matchen vil være gyldig på stedet hvis den samsvarer med settet med tegn som ligger i parentes. For eksempel vil følgende kommando matche “The” og “Tee” som gyldige treff.

$ awk '/ T [he] e /' prøve.tekst

Det er noen forhåndsdefinerte tegnsett i det regulære uttrykket. For eksempel er settet med alle store bokstaver merket som “A-Z”. I den følgende kommandoen vil awk matche alle ordene som inneholder en stor bokstav.

$ awk '/ [A-Z] /' prøve.tekst

Ta en titt på følgende bruk av tegnsett med parentesuttrykk.

  • [0-9]: Indikerer et enkelt siffer
  • [a-z]: Indikerer en enkelt liten bokstav
  • [A-Z]: Indikerer en enkelt stor bokstav
  • [a-zA-z]: Indikerer en enkelt bokstav
  • [a-zA-z 0-9]: Indikerer et enkelt tegn eller siffer.

Awk forhåndsdefinerte variabler

AWK kommer med en haug med forhåndsdefinerte og automatiske variabler. Disse variablene kan gjøre det lettere å skrive programmer og skript med AWK.

Her er noen av de vanligste AWK-variablene du kommer over.

  • FILNAVN: Filnavnet til den nåværende inndatafilen.
  • RS: Plateskilleren. På grunn av AWKs natur behandler den data én post om gangen. Her spesifiserer denne variabelen avgrenseren som brukes for å dele datastrømmen i poster. Som standard er denne verdien det nye linjetegnet.
  • NR: Gjeldende inngangspostnummer. Hvis RS-verdien er satt til standard, vil denne verdien indikere gjeldende inngangslinjenummer.
  • FS / OFS: Tegnet / tegnene som brukes som feltseparator. Når den er lest, deler AWK en post i forskjellige felt. Avgrenseren er definert av verdien av FS. Ved utskrift slutter AWK seg til alle feltene. På dette tidspunktet bruker AWK imidlertid OFS-separatoren i stedet for FS-separatoren. Generelt er både FS og OFS de samme, men ikke obligatoriske å være det.
  • NF: Antall felt i gjeldende post. Hvis standardverdien “mellomrom” brukes, vil den matche antall ord i gjeldende post.
  • ORS: Plateseparatoren for utdataene. Standardverdien er det nye linjetegnet.

La oss sjekke dem i aksjon. Følgende kommando vil bruke NR-variabelen til å skrive ut linje 2 til linje 4 fra eksempel.tekst. AWK støtter også logiske operatører som logisk og (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

For å tildele en bestemt verdi til en AWK-variabel, bruk følgende struktur.

$ awk '// ; ; ' =,

For eksempel, for å fjerne alle de tomme linjene fra inndatafilen, endrer du verdien på RS til stort sett ingenting. Det er et triks som bruker en uklar POSIX-regel. Den spesifiserer at hvis verdien av RS er en tom streng, blir postene atskilt med en sekvens som består av en ny linje med en eller flere tomme linjer. I POSIX er en tom linje uten innhold helt tom. Men hvis linjen inneholder mellomrom, anses den ikke som "tom".

$ 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. Å mestre 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, så er det noen ekstra ressurser du bør sjekke ut.

  • Trim hvitt mellomrom
  • Bruke en betinget uttalelse
  • Skriv ut en rekke kolonner
  • Regex med AWK
  • 20 AWK eksempler

Internett er 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 AWK-grunnleggende. Selv om det kan ta en stund, er mestring av AWK ekstremt givende når det gjelder kraften den gir.

Glad databehandling!

Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...
Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...
Hvordan utvikle et spill på Linux
For et tiår siden ville ikke mange Linux-brukere forutsi at deres favorittoperativsystem en dag ville være en populær spillplattform for kommersielle ...