Skip to main content

Så här skriver du AWK-kommandon och skript

20090926 Overview Of Divine Truth - Secrets Of The Universe S1P2 (Juni 2026)

20090926 Overview Of Divine Truth - Secrets Of The Universe S1P2 (Juni 2026)
Anonim

Kommandot awk är en kraftfull metod för att bearbeta eller analysera textfiler, i synnerhet datafiler som är organiserade av linjer (rader) och kolumner.

Enkel awk Kommandon kan köras från kommandoraden. Mer komplicerade uppgifter ska skrivas som awk-program (sk "awk scripts") till en fil.

Det grundläggande formatet för ett awk-kommando ser så här ut:

awk 'mönster {action}' inmatningsfil> utdatafil

Detta betyder: ta varje rad i ingångsfilen; Om raden innehåller mönstret ange åtgärden till linjen och skriv den resulterande raden till utgångsfilen. Om mönstret utelämnas tillämpas åtgärden på all linje. Till exempel:

awk '{skriv ut $ 5}' table1.txt> output1.txt

Detta uttalande tar elementet i den femte kolumnen i varje rad och skriver det som en rad i utdatafilen "output.txt". Variabeln '$ 4' avser den andra kolumnen. På samma sätt kan du komma åt första, andra och tredje kolumnen, med $ 1, $ 2, $ 3, etc. Som standard antas kolumner separeras av mellanslag eller flikar (så kallat white space). Så om inmatningsfilen "table1.txt" innehåller dessa rader:

1, Justin Timberlake, Titel 545, Pris $ 7,302, Taylor Swift, Titel 723, Pris $ 7,903, Mick Jagger, Titel 610, Pris $ 7,904, Lady Gaga, Titel 118, Pris $ 7,305, Johnny Cash, Titel 482, Pris $ 6.506, Elvis Presley, Titel 335, Pris $ 7,307, John Lennon, Titel 271, Pris $ 7,908, Michael Jackson, Titel 373, Pris $ 5,50

Då skulle kommandot skriva följande rader till utdatafilen "output1.txt":

545,723,610,118,482,335,271,373,

Om kolonneparatorn är något annat än mellanslag eller flikar, som ett komma, kan du ange det i awk-satsen enligt följande:

awk -F, '{print $ 3}' table1.txt> output1.txt

Detta kommer att markera elementet från kolumn 3 i varje rad om kolumnerna anses vara åtskilda av ett kommatecken. Därför skulle utmatningen vara:

Titel 545 Avdelning 723 Avdelning 610 Avdelning 118 Titel 482 Avdelning 335 Titel 271 Titel 373

Listan över uttalanden i de krökta parenteserna ('{', '}') kallas ett block. Om du ställer ett villkorligt uttryck framför ett block, kommer uttalandet inuti blocket att utföras endast om villkoret är sant.

awk '$ 7 == " $ 7.30" {print $ 3}' table1.txt

I detta fall är villkoret $ 7 == " $ 7.30", vilket innebär att elementet i kolumn 7 är lika med $ 7,30. Bakslaget framför dollarns tecken används för att förhindra att systemet tolkar $ 7 som en variabel och istället tar dollarns tecken bokstavligen.

Så detta awk uttalande skriver ut elementet i den tredje kolumnen i varje rad som har en "$ 7.30" i kolumn 7.

Du kan också använda reguljära uttryck som villkoret. Till exempel:

awk '/ 30 / {print $ 3}' table1.txt

Strängen mellan de två snedstreckena ('/') är det reguljära uttrycket. I detta fall ä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 i den raden. Utgången i ovanstående exempel skulle vara:

Timberlake, Gaggig, Presley,

Om tabellelementen är siffror awk kan du köra beräkningar på dem som i det här exemplet:

awk '{print ($ 2 * $ 3) + $ 7}'

Förutom de variabler som har tillgång till element i den aktuella raden ($ 1, $ 2, etc.) finns variabeln $ 0 som refererar till den kompletta raden (rad) och variabeln NF som håller till antalet fält.

Du kan också definiera nya variabler som i det här exemplet:

awk '{sum = 0; för (col = 1; kol <= NF; col ++) sum + = $ col; tryck summan; }'

Detta beräknar och skriver ut summan av alla element i varje rad.

Awk-uttalanden kombineras ofta med sed-kommandon.