programmera.net -> linux -> normal     för utskrift      info@programmera.net

AWK

1. Om AWK
2. Att köra AWK
3. Enkelt AWK program
4. Exempel på körbart program
5. Olika sätt att separera kolumnerna

1. Om AWK

Denna sida beskriver hur du skriver program i AWK. AWK är ett enkelt programmeringsspråk som används för att behandla filer med sorterat innehåll. Om du har en textfil med t.ex. tab-separerade kolumner innehållande data av olika typ som du vill behandla på något sätt passar ofta AWK bra till detta. Ett AWK-program består av en lista med regler där varje regel består av ett pattern och en action enligt:

pattern { action }
pattern { action }
...

2. Att köra AWK

För små AWK-program är det enklast att skriva in "programmet" direkt i AWK-anropet, se nedan:
[olle@dev1]$ awk 'program' input-file1 input-file2 ...
Om du vill applicera AWK-programmet på standard input istället för på en fil så skriver man på klassiskt UNIX-sätt:
[olle@dev1]$ some_program | awk 'program' 
Här tolkas alla inkommande rader som på samma sätt som raderna i en fil. För längre program ligger programmet i en speciell fil som man pekare ut med -f flaggen, se nedan:
[olle@dev1]$ awk -f program-file input-file1 input-file2 ...
Om du vill skapa en körbart program kan du lägga följande i början av filen "#! /bin/awk -f", se nedan:

#! /bin/awk -f

... program ...

3. Enkelt AWK program

Om jag har följande innehåll i den mapp jag står i:
[olle@dev1]$ ls -l
totalt 56
drwxr-xr-x 2 olle olle  4096 2007-11-17 14:21 bin
drwxr-xr-x 2 olle olle  4096 2007-10-04 21:07 client
drwxr-xr-x 7 olle olle  4096 2007-10-04 21:07 docs
-rw-r--r-- 1 olle olle 23121 2007-10-04 21:07 InstallConfigRecord.xml
-rw-r--r-- 1 olle olle  1250 2007-10-04 21:07 InstallSummary.html
drwxr-xr-x 3 olle olle  4096 2007-10-04 21:07 lib
drwxr-xr-x 2 olle olle  4096 2007-10-04 21:07 scripts
drwxr-xr-x 3 olle olle  4096 2007-10-04 21:07 server
drwxr-xr-x 2 olle olle  4096 2007-10-04 21:07 Uninstaller
Så kan jag använda AWK för att behandla detta innehåll. I programmet nedan väljer jag ut alla rader som innehåller strängen "bi":
[olle@dev1]$ ls -l | awk '/bi/'
drwxr-xr-x 2 olle olle  4096 2007-11-17 14:21 bin
Det vi har gjort är att simulera anropet "grep bi". Om vi vill ha ytterligare funktionalitet i vår regel kan vi lägga till denna inom måsvingar:
[olle@dev1]$ ls -l | awk '/bi/ { print "file " $8 " has size: " $5 } '
file bin has size: 4096
Nu börjar vi förstå vad AWK ska användas till, nämligen bearbeta enskilda kolumner i textfiler.

4. Exempel på körbart program

Vi kan spara detta program i en körbar fil olles_grep med följande innehåll:

#! /bin/awk -f
/bi/
När vi kör olles_grep ser det ut på detta sätt:
[olle@dev1]$ ls -l | ./olles_grep
drwxr-xr-x 2 olle olle  4096 2007-11-17 14:21 bin

5. Olika sätt att separera kolumnerna