Awk

Sådan bruges AWK på Linux

Sådan bruges AWK på Linux

Hjælpeprogrammerne, som Linux tilbyder, følger ofte designfilosofien UNIX. Ethvert værktøj skal være lille, brug almindelig tekst til I / O og fungere modulært. Takket være arven har vi nogle af de fineste tekstbehandlingsfunktioner ved hjælp af værktøjer som sed og awk.

I Linux kommer awk-værktøjet forudinstalleret på alle Linux-distroer. AWK selv er et programmeringssprog. AWK-værktøjet er bare en fortolker af AWK's programmeringssprog. I denne vejledning skal du tjekke, hvordan du bruger AWK på Linux.

AWK-brug

AWK-værktøjet er mest nyttigt, når tekster er organiseret i et forudsigeligt format. Det er ret godt til at analysere og manipulere tabeldata. Den fungerer lineært for hele tekstfilen.

Awk's standardadfærd er at bruge mellemrum (mellemrum, faner osv.) til adskillelse af felter. Heldigvis følger mange af konfigurationsfilerne på Linux dette mønster.

Grundlæggende syntaks

Sådan ser kommandostrukturen til awk ud.

$ awk '// ; ; '

Dele af kommandoen er ret selvforklarende. Awk kan fungere uden søgnings- eller handlingsdelen. Hvis der ikke er angivet noget, er standardhandlingen på kampen bare udskrivning. Dybest set vil awk udskrive alle de match, der findes i filen.

Hvis der ikke er angivet noget søgemønster, udfører awk de angivne handlinger på hver enkelt linje i filen.

Hvis begge dele er givet, vil awk bruge mønsteret til at afgøre, om den aktuelle linje afspejler det. Hvis det matches, udfører awk den angivne handling.

Bemærk, at awk også kan arbejde på omdirigerede tekster. Dette kan opnås ved at pibe indholdet af kommandoen til at forkæle at handle på. Lær mere om Linux-rørkommandoen.

Til demo-formål er her en eksempeltekstfil. Den indeholder 10 linjer, 2 ord pr. Linje.

$ katteprøve.txt

Almindelig udtryk

En af nøglefunktionerne, der gør awk til et kraftfuldt værktøj, er understøttelse af regulært udtryk (kort regex). Et regulært udtryk er en streng, der repræsenterer et bestemt tegnmønster.

Her er en liste over nogle af de mest almindelige syntakser for regulære udtryk. Disse regex-syntakser er ikke kun unikke for awk. Disse er næsten universelle regex-syntakser, så mastering af dem vil også hjælpe i andre apps / programmering, der involverer regelmæssigt udtryk.

  • Grundlæggende tegn: Alle de alfanumeriske tegn understreger (_) osv.
    • Tegnsæt: For at gøre tingene lettere er der tegngrupper i regex. For eksempel store bogstaver (A-Z), små bogstaver (a-z) og numeriske cifre (0-9).
  • Metakarakterer: Dette er tegn, der forklarer forskellige måder at udvide de almindelige tegn på.
    • Periode (.): Ethvert karaktermatch i positionen er gyldigt (undtagen en ny linje).
    • Stjerne (*): Nul eller flere eksistenser af den umiddelbare karakter forud for den er gyldige.
    • Beslag ([]): Kampen er gyldig, hvis nogen af ​​tegnene i parentes på positionen matches. Det kan kombineres med tegnsæt.
    • Tjener (^): Kampen skal være i starten af ​​linjen.
    • Dollar ($): Kampen skal være i slutningen af ​​linjen.
    • Omvendt skråstreg (\): Hvis en metakarakter skal bruges i bogstavelig forstand.

Udskrivning af teksten

Brug udskrivningskommandoen til at udskrive alt indholdet af en tekstfil. I tilfælde af søgemønster er der ikke defineret noget mønster. Så awk udskriver alle linjerne.

$ awk 'print' prøve.txt

Her er "udskriv" en AWK-kommando, der udskriver indholdet af input.

Strengsøgning

AWK kan udføre en grundlæggende tekstsøgning på den givne tekst. I mønstersektionen skal det være teksten at finde.

I den følgende kommando søger awk efter teksten "hurtig" på alle linjerne i fileksemplet.txt.

$ awk '/ hurtig /' prøve.txt

Lad os nu bruge nogle regelmæssige udtryk for at finjustere søgningen yderligere. Den følgende kommando udskriver alle linjer, der har "brun" i starten.

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

Hvad med at finde noget i slutningen af ​​en linje? Den følgende kommando udskriver alle de linjer, der har "hurtig" i slutningen.

$ awk '/ hurtig $ /' prøve.txt

Wild card mønster

Det næste eksempel viser brugen af ​​caret (.). Her kan der være to tegn før tegnet “e”.

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

Wild card mønster (ved hjælp af stjerne)

Hvad hvis der kan være et hvilket som helst antal tegn på stedet? For at matche for enhver mulig karakter på positionen skal du bruge stjernen (*). Her vil AWK matche alle linjer, der har en hvilken som helst mængde tegn efter "the".

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

Beslagsudtryk

Følgende eksempel viser, hvordan du bruger parentesudtrykket. Beslagsudtryk fortæller, at matchet vil være gyldigt på stedet, hvis det matcher det sæt tegn, der er omsluttet af parenteserne. For eksempel vil følgende kommando matche “The” og “Tee” som gyldige matches.

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

Der er nogle foruddefinerede tegnsæt i det regulære udtryk. For eksempel er sættet med alle store bogstaver mærket som “A-Z”. I den følgende kommando matcher awk alle de ord, der indeholder et stort bogstav.

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

Se på følgende brug af tegnsæt med parentesudtryk.

  • [0-9]: Angiver et enkelt ciffer
  • [a-z]: Angiver et enkelt lille bogstav
  • [A-Z]: Angiver et enkelt stort bogstav
  • [a-zA-z]: Angiver et enkelt bogstav
  • [a-zA-z 0-9]: Angiver et enkelt tegn eller ciffer.

Awk foruddefinerede variabler

AWK leveres med en masse foruddefinerede og automatiske variabler. Disse variabler kan gøre det lettere at skrive programmer og scripts med AWK.

Her er nogle af de mest almindelige AWK-variabler, som du støder på.

  • FILNAVN: Filnavnet på den aktuelle inputfil.
  • RS: Pladeseparatoren. På grund af AWK's karakter behandler den data en post ad gangen. Her specificerer denne variabel den afgrænser, der bruges til at opdele datastrømmen i poster. Denne værdi er som standard den nye linjetegn.
  • NR: Det aktuelle input-registreringsnummer. Hvis RS-værdien er indstillet til standard, angiver denne værdi det aktuelle inputlinjenummer.
  • FS / OFS: Tegnet / tegnene, der bruges som feltseparator. Når det er læst, deler AWK en post i forskellige felter. Afgrænseren er defineret af værdien af ​​FS. Under udskrivning slutter AWK sig til alle felter igen. På dette tidspunkt bruger AWK imidlertid OFS-separatoren i stedet for FS-separatoren. Generelt er både FS og OFS de samme, men ikke obligatoriske at være det.
  • NF: Antallet af felter i den aktuelle post. Hvis standardværdien "hvidt mellemrum" anvendes, svarer den til antallet af ord i den aktuelle post.
  • ORS: Pladeseparatoren for outputdataene. Standardværdien er den nye linjetegn.

Lad os kontrollere dem i aktion. Den følgende kommando bruger NR-variablen til at udskrive linje 2 til linje 4 fra prøve.txt. AWK understøtter også logiske operatører som logisk og (&&).

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

Brug følgende struktur for at tildele en bestemt værdi til en AWK-variabel.

$ awk '// ; ; ' =,

For eksempel, for at fjerne alle de tomme linjer fra inputfilen skal du ændre værdien af ​​RS til stort set intet. Det er et trick, der bruger en uklar POSIX-regel. Det specificerer, at hvis værdien af ​​RS er en tom streng, så er poster adskilt af en sekvens, der består af en ny linje med en eller flere tomme linjer. I POSIX er en tom linje uden indhold helt tom. Men hvis linjen indeholder mellemrum, betragtes den ikke som "blank".

$ awk 'print' RS = "prøve.txt

Yderligere ressourcer

AWK er et kraftfuldt værktøj med masser af funktioner. Mens denne vejledning dækker mange af dem, er det stadig kun det grundlæggende. Mastering AWK tager mere end bare dette. Denne guide skal være en god introduktion til værktøjet.

Hvis du virkelig vil beherske værktøjet, er her nogle yderligere ressourcer, du bør tjekke ud.

  • Trim hvidt mellemrum
  • Brug af en betinget erklæring
  • Udskriv en række kolonner
  • Regex med AWK
  • 20 AWK eksempler

Internettet er et godt sted at lære noget. Der er masser af fantastiske tutorials om AWK-grundlæggende for meget avancerede brugere.

Sidste tanke

Forhåbentlig hjalp denne guide med at give en god forståelse af AWK-grundlæggende. Selvom det kan tage et stykke tid, er mastering af AWK ekstremt givende med hensyn til den styrke, den tilfører.

Glad computing!

5 bedste arkadespil til Linux
I dag er computere seriøse maskiner, der bruges til spil. Hvis du ikke kan få den nye høje score, ved du hvad jeg mener. I dette indlæg vil du kende n...
Kamp om Wesnoth 1.13.6 Udvikling frigivet
Kamp om Wesnoth 1.13.6 udgivet i sidste måned, er den sjette udviklingsudgivelse i 1.13.x-serien, og den leverer en række forbedringer, især til bruge...
Sådan installeres League Of Legends på Ubuntu 14.04
Hvis du er fan af League of Legends, er dette en mulighed for dig at prøvekøre League of Legends. Bemærk, at LOL understøttes på PlayOnLinux, hvis du ...