Awk är ett kraftfullt databehandlingsprogram för språket inbyggt i nästan alla * nix-system. Det ser ut som ett allmänt programmerat språk på ytan, men det är byggt för att ta in och driva åtgärder utifrån den inmatningen. Om du behöver bearbeta text baserat på vissa förutsättningar, kommer awk nästan alltid att få jobbet gjort snabbare än ett allmänt språk som C. Det tolkas också så att du undviker den långvariga sammanställningen och felsökningsprocessen i kompilerade språk.

Extra roligt faktum : Programmets udda namn är en initialism av programmers namn: Alfred A ho, Peter W einberger och Brian K ernighan

Awks grundläggande syntax

När den åberopas på kommandoraden följer awk det grundläggande mönstret nedan:

 mönster {action} filmönster {action} fil ... 

Awk kommer att utföra åtgärden när mönstret matchas inom den angivna filen. Om du inte anger en fil körs awk på standardutgången. Vid matchning av mönster kan awk ta regelbundna uttryck samt programmatisk inmatning. Låt oss överväga detta grundläggande exempel nedan:

 awk '/ com / {print $ 0}' e-post 

Detta enlinjeprogram skriver ut varje rad från filens "e-postmeddelanden" som innehåller tecknen com . I awk hänvisar $0 till den aktuella raden, vilket också är standardbeteendet. Linjen kunde ha skrivits utan $0, och det skulle ha fungerat identiskt.

Utskriftsfält

Eftersom awk kan identifiera och analysera fältavskiljare är det användbart för att skriva ut specifika kolumner eller rader med data. Vi kommer att använda filen "/ etc / passwd" för det här exemplet.

 awk -F ":" '{print $ 1}' / etc / passwd 

Detta ett-linjeprogram gör några saker. Flaggan -F indikerar att nästa tecken ( : i detta exempel) ska tolkas som fältavskiljare. Awk dem skriver ut det första fältet, specificerat av $1 .

Vi kan också skriva ut mer än ett fält i taget genom att specificera fälten i följd:

 awk -F ":" '{print $ 4 "" $ 5}' / etc / passw 

Det kommer att producera produktionen som ser ut som följande.

Detta skriver ut det fjärde och femte fältet i passwd filen med ett mellanslag mellan dem. Observera att utrymmet är mellan dubbla citat. Detta specificerar det som en bokstavlig karaktär inom utskriftskommandot, så det skrivs ut som skrivet. Vi kan också lägga till mer komplicerade bokstäver för att städa upp vår produktion:

 awk -F ":" "{print" process: "$ 5" \ t \ t "" katalog: "$ 6} '/ etc / passwd 

Detta kommer att skriva ut utgången med etiketter för identifiering. Och vi kan mata ut allt detta till en ny fil med en caret (>).

 awk -F ":" "{print" process: "$ 5" \ t \ t "" katalogen: "$ 6} '/ etc / passwd> processes.txt 

Vi kan kombinera vad vi vet så långt att bearbeta data i stor utsträckning. Till exempel kan vi använda vanliga uttryck för att skriva ut alla rader från ett dokument som innehåller ett giltigt amerikanskt telefonnummer.

 awk '/^(\+\d{1, 2}\s)?\(?\d{3}\)?[\s.-\\{{}[\\\\\{{ } $ / {print} 'kontakter 

Utvidgning av Awk-kommandot matchande effekt

Awk kan också bearbeta information med en mängd olika operander. Detta inkluderar standard operander som ==, <, >, <=, >=, och !=, Samt awk-specifika operander ~ och !~, Vilket betyder "matchningar" och "matchar inte" respektive. Dessa operander används vid jämförelse mellan reguljära uttryck med Boolean logik, liksom fler standardprogrammatiska fraser.

Awk-kommando Exempel

 awk 'längd ($ 0)> 80' data 

Skriver ut alla rader längre än 80 i filen "data". Observera bristen på ett utskriftsutdrag: Om en specifik åtgärd saknas kommer awk att skriva ut hela raden när ett mönster matchar.

 $ 1 == "användare" {print} 

Skriver ut alla rader där det första fältet är lika med strängen "användare". Utan en -F flagg, kommer awk att använda blankutrymme som standardfältavskiljare. Observera också att awk och filen inte anges. Detta är för användning i skript i separata filer, enligt nedan.

 $ 5 ~ / root / {skriv ut $ 3} 

Skriver ut det tredje fältet när det femte fältet matchar det vanliga uttrycket /root/ .

 {if ($ 5! ~ / root /) {skriv ut $ 3}} 

När fält 5 inte matchar /root/, skriv ut fält tre. Detta använder C-liknande if satsen, som också är kompatibel med awk. Detta format möjliggör större flexibilitet för programmerare som är bekant med allmänt språk.

Spara skript i filer

Awk-skript kan också sparas i filer som låter dig spara mer komplexa program:

 awk -f ~ / scripts / program.awk data 

När du använder -f flaggan, körs awk scriptet i den angivna program.awk, nämligen program.awk . Kommandona i det programmet kommer att behandla filen "data".

Åtgärder kan också köras före och efter programmet, med BEGIN och END :

 BEGIN {FS = ":"} # indikerar att: är fältavskiljaren för programmet. #operations END {print "Du är klar"} # skriver ett glatt meddelande till användaren 

Som du kan se ovan börjar # -symbolen en kommentar, som varar fram till slutet av raden.

Slutsats

Denna guide berör bara de mest grundläggande elementen i awk. Det finns mycket mer att bygga och utforska bortom detta. Undersök GNU-dokumentationen för awk eller Awk Programming Language och awk-läroboken som skrivits av programutvecklarna.