Kommandoen awk er en kraftfuld metode til behandling eller analyse af tekstfiler - især datafiler, der er organiseret af linjer (rækker) og kolonner.
Enkel awk Kommandoer kan køres fra kommandolinjen. Mere komplekse opgaver skal skrives som awk programmer (såkaldte awk scripts) til en fil.
Grundformatet for en awk-kommando ser sådan ud:
awk 'mønster {action}' input-fil> output-fil
Dette betyder: Tag hver linje i inputfilen; Hvis linjen indeholder mønsteret, skal du følge handlingen til linjen og skrive den resulterende linje til output-filen. Hvis mønsteret udelades, anvendes handlingen på hele linjen. For eksempel: awk '{print $ 5}' table1.txt> output1.txt Denne erklæring tager elementet i den 5. kolonne i hver linje og skriver det som en linje i outputfilen "output.txt". Variablen '$ 4' refererer til den anden kolonne. På samme måde kan du få adgang til den første, anden og tredje kolonne med $ 1, $ 2, $ 3 osv. Som standard antages kolonner at være adskilt af mellemrum eller faner (såkaldt hvidt mellemrum). Så hvis inputfilen "table1.txt" indeholder disse linjer: 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 Derefter skulle kommandoen skrive følgende linjer til outputfilen "output1.txt": 545,723,610,118,482,335,271,373, Hvis kolonneparatoren er noget andet end mellemrum eller faner, f.eks. Et komma, kan du angive det i awk-sætningen som følger: awk -F, '{print $ 3}' table1.txt> output1.txt Dette vælger elementet fra kolonne 3 i hver linje, hvis kolonnerne anses for at være adskilt af et komma. Derfor vil udgangen i dette tilfælde være: Afsnit 545 Afsnit 723 Afsnit 610 Afsnit 118 Titel 482 Titel 335 Afsnit 271 Titel 373 Listen over udtalelser i de krøllede parenteser ('{', '}') kaldes en blok. Hvis du sætter et betinget udtryk foran en blok, vil sætningen inde i blokken kun blive udført, hvis tilstanden er sand. awk '$ 7 == " $ 7.30" {print $ 3}' table1.txt I dette tilfælde er betingelsen $ 7 == " $ 7.30", hvilket betyder at elementet i kolonne 7 er lig med $ 7,30. Baggrunden foran dollarskiltet bruges til at forhindre, at systemet fortolker $ 7 som en variabel og i stedet tager dollartegnet bogstaveligt. Så denne akke erklæring udskriver elementet i 3. kolonne af hver linje, der har en "$ 7.30" i kolonne 7. Du kan også bruge regulære udtryk som betingelsen. For eksempel: awk '/ 30 / {print $ 3}' table1.txt Strengen mellem de to skråstreger ('/') er det regulære udtryk. I dette tilfælde er det bare strengen "30." Dette betyder, at hvis en linje indeholder strengen "30", udskriver systemet elementet i den tredje kolonne af den pågældende linje. Udgangen i ovenstående eksempel ville være: Timberlake, Gaga, Presley, Hvis tabelelementerne er tal awk kan køre beregninger på dem som i dette eksempel: awk '{print ($ 2 * $ 3) + $ 7}' Ud over de variabler, der har adgang til elementer i den aktuelle række ($ 1, $ 2 osv.), Er variablen $ 0, som refererer til den komplette række (linje) og variablen NF, der holder til antallet af felter. Du kan også definere nye variabler som i dette eksempel: awk '{sum = 0; for (col = 1; kol <= NF; col ++) sum + = $ col; print sum; }' Dette beregner og udskriver summen af alle elementerne i hver række. AWK udsagn kombineres ofte med sed kommandoer.




