Skip to content

Hur man skriver AWK-kommandon och skript

17 de juni de 2021
graphicsdesigner 56b54f5a5f9b5829f82d3211

Kommandot awk är en kraftfull metod för bearbetning eller analys av textfiler. I synnerhet analyserar den datafiler som är organiserade efter rader (rader) och kolumner. Enkla awk-kommandon kan köras från kommandoraden. Mer komplexa uppgifter bör skrivas som awk-program (kallas awk-skript) till en fil.

AWK Basics

Grundformatet för ett awk-kommando ser ut så här: awk ’mönster {action}’ inmatningsfil> utdatafil

Detta betyder: ta varje rad i inmatningsfilen; om raden innehåller mönstret, använd åtgärden på raden och skriv den resulterande raden till utdatafilen. Om mönstret utelämnas tillämpas åtgärden på alla rader. Till exempel: awk ’{print $ 5}’ table1.txt> output1.txt

Ovanstående uttalande tar elementet i den femte kolumnen på varje rad och skriver det som en rad i utdatafilen ”output.txt.” Variabeln ’$ 4’ hänvisar till den fjärde kolumnen. På samma sätt kan du komma åt den första, andra och tredje kolumnen, med $ 1, $ 2, $ 3, etc. Som standard antas kolumner vara åtskilda av mellanslag eller flikar (så kallat vitt utrymme). Så om inmatningsfilen ”table1.txt” innehåller följande rader: 1, Justin Timberlake, avdelning 545, pris $ 7,30
2, Taylor Swift, avdelning 723, pris 7,90 dollar
3, Mick Jagger, titel 610, pris 7,90 dollar
4, Lady Gaga, avdelning 118, pris 7,30 dollar
5, Johnny Cash, avdelning 482, pris $ 6,50
6, Elvis Presley, avdelning 335, pris $ 7,30
7, John Lennon, avdelning 271, pris 7,90 dollar
8, Michael Jackson, avdelning 373, pris $ 5,50

Sedan skulle kommandot skriva följande rader till utdatafilen ”output1.txt”: 545,
723,
610,
118,
482,
335,
271,
373,

Om kolumnavgränsaren är något annat än mellanslag eller flikar, till exempel ett komma, kan du ange det i awk-uttalandet enligt följande: awk -F, ’{print $ 3}’ table1.txt> output1.txt

Detta kommer att välja elementet från kolumn 3 på varje rad om kolumnerna anses vara åtskilda med ett komma. Därför skulle resultatet i det här fallet vara: Titel 545
Avdelning 723
Avdelning 610
Avdelning 118
Avdelning 482
Avdelning 335
Avdelning 271
Avdelning 373

Villkorliga uttryck i AWK

Listan över uttalanden inom de lockiga parenteserna (’{’, ’}’) kallas ett block. Om du lägger ett villkorligt uttryck framför ett block kommer uttalandet inuti blocket att exekveras endast om villkoret är sant. awk ’$ 7 == ” $ 7.30″ {skriv ut $ 3}’ table1.txt

I det här fallet är villkoret $ 7 == ” $ 7,30″, vilket innebär att elementet i kolumn 7 är lika med $ 7,30. Omvänd snedstreck framför dollartecknet används för att förhindra att systemet tolkar $ 7 som en variabel och istället tar dollartecknet bokstavligt. Så detta awk-uttalande skriver ut elementet i den tredje kolumnen i varje rad som har ”$ 7,30” i kolumn 7. Du kan också använda reguljära uttryck som villkor. Till exempel: awk ’/ 30 / {print $ 3}’ table1.txt

Strängen mellan de två snedstrecken är det vanliga uttrycket. I det här fallet är det bara strängen ”30.” Detta betyder att om en rad innehåller strängen ”30”, skriver systemet ut elementet i den tredje kolumnen på den raden. Resultatet i exemplet ovan skulle vara: Timberlake,
Gaggig,
Presley,

Utför beräkningar i AWK

Om tabellelementen är siffror kan awk köra beräkningar på dem som i det här exemplet: awk ’{print ($ 2 * $ 3) + $ 7}’

Förutom variablerna som får åtkomst till element i den aktuella raden ($ 1, $ 2, etc.) finns variabeln $ 0 som refererar till hela raden (rad) och variabeln NF som håller till antalet fält. Du kan också definiera nya variabler som i detta exempel: awk ’{sum = 0; för (col = 1; col <= NF; col ++) sum + = $ col; tryckbelopp; } ’

Detta beräknar och skriver ut summan av alla element i varje rad. Awk-uttalanden kombineras ofta med sed-kommandon.