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.




