Sådan skriver du AWK-kommandoer og scripts

Kommandoen awk er en kraftfuld metode til at behandle eller analysere tekstfiler. Det analyserer især datafiler, der er organiseret efter linjer (rækker) og kolonner. Simple awk-kommandoer kan køres fra kommandolinje. Mere komplekse opgaver bør skrives som awk-programmer (kaldet awk-scripts) til en fil.

Grafisk designer arbejder sent ved computeren på kontoret
Hero Images / Getty Images

Grundlæggende om AWK

Det grundlæggende format for en awk-kommando ser sådan ud:

awk 'mønster {action}' input-fil > output-fil

Det betyder: Tag hver linje i inputfilen; hvis linjen indeholder mønsteret, skal du anvende handlingen på linjen og skrive den resulterende linje til outputfilen. Hvis mønsteret udelades, anvendes handlingen på alle linjer. For eksempel:

awk '{ print $5 }' tabel1.txt > output1.txt

Ovenstående sætning tager elementet i den 5. kolonne i hver linje og skriver det som en linje i outputfilen "output.txt." Variablen '$4' refererer til den fjerde 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 tabulatorer (såkaldt hvidt mellemrum). Så hvis inputfilen "table1.txt" indeholder disse linjer:

1, Justin Timberlake, titel 545, pris $7,30
2, Taylor Swift, titel 723, pris $7,90
3, Mick Jagger, titel 610, pris $7,90
4, Lady Gaga, titel 118, pris $7,30
5, Johnny Cash, titel 482, pris $6,50
6, Elvis Presley, titel 335, pris $7,30
7, John Lennon, titel 271, pris $7,90
8, Michael Jackson, titel 373, pris $5,50

Så ville kommandoen skrive følgende linjer til outputfilen "output1.txt":

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

Hvis kolonneseparatoren er noget andet end mellemrum eller tabulatorer, såsom et komma, kan du angive det i awk-sætningen som følger:

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

Dette vil vælge elementet fra kolonne 3 på hver linje, hvis kolonnerne anses for at være adskilt af et komma. Derfor ville outputtet i dette tilfælde være:

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

Betingede udtryk i AWK

Listen over udsagn inden for de krøllede parenteser ('{','}') kaldes en blok. Hvis du sætter en betinget udtryk foran en blok vil sætningen inde i blokken kun blive udført, hvis betingelsen er sand.

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

I dette tilfælde er betingelsen $7=="\$7,30", hvilket betyder, at elementet i kolonne 7 er lig med $7,30. Omvendt skråstreg foran dollartegnet bruges til at forhindre systemet i at fortolke $7 som en variabel og i stedet tage dollartegnet bogstaveligt.

Så denne awk-sætning udskriver elementet i den tredje kolonne i hver linje, der har en "$7,30" i kolonne 7.

Du kan også bruge regulære udtryk som betingelse. For eksempel:

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

Strengen mellem de to skråstreger ('/') er det regulære udtryk. I dette tilfælde er det kun strengen "30". Dette betyder, at hvis en linje indeholder strengen "30", udskriver systemet elementet i den 3. kolonne på den linje. Det produktion i ovenstående eksempel ville være:

Timberlake,
Gaga,
Presley,

Udfør beregninger i AWK

Hvis tabelelementerne er tal, kan awk køre beregninger på dem som i dette eksempel:

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

Udover de variable, der tilgår elementer i den aktuelle række ($1, $2, osv.), er der variablen $0, som refererer til hele rækken (linien), og variablen NF, der holder til antallet af felter.

Du kan også definere nye variable som i dette eksempel:

awk '{ sum=0; for (kol = 1; col<=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.