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!