Computer,  Programmering

AWK intro


[-----------------------------
[ $ cat 00_intro.txt ]

AWKing af Lars Sommer, lasg@lasg.dk
2005-04-20

Dette er en rÊkke simple eksempler p hvad programmet awk kan bruges til.
Awk kan meget, og der er skrevet hele b¯ger om det. Jeg vil kun gennemg det
 meget overfladisk.
Du kan mÂske bruge mine noter og eksempler som en lille introduktion til awk.

Awk kan bruge mange c-lignende statements, som if-else, while, for, break,
 next og exit.
Jeg vil kun gennemg enkelte af dem.

For mere information:
skriv "man awk"
google awk


Simpel brug af awk-scripting direkte p kommandolinjen:

Awk deler linjer i en fil op i enkelte dele, som kan bearbejdes.
Denne kommando printer f¯rste ord af hver linje i den givne fil p skÊrmen:
awk '{print $1}' filnavn

Der sÊttes {} omkring awk-scriptet, og nÂr det bruges direkte p kommandolinjen,
 sÊttes '' omrking scriptet. Selve scriptet er her blot print $1.


∆ndre field separatoren:
Normalt deler awk linjerne op i ord adskilt med mellemrum. Men hvis der nu
 arbejdes med en fil som f.eks. /etc/passwd, ¯nskes det mÂske at dele linjerne
 op med : som separator.
Parameteren -F bruges til at Êndre field separator. Her bruger vi : som
 separator, og fÂr printet f¯rste "ord" af /etc/passwd (brugernavnene):
awk -F: '{print $1}' /etc/passwd


Bruge awk-scriptfiler i stedet for kommandolinjen:
For at bede awk om at bruge en fil som et awk-script,
 gives den -f-parameteren, som:
awk -f awkscript filderskalrodesi



[-----------------------------
[ $ cat 01_begin_end.awk ]

#BEGIN og END:
#De to kan bruges til at f en kommando udf¯rt en enkelt gang nÂr scriptet
# starter, og nÂr det slutter, i forhold til resten, som bliver udf¯rt en gang
# ved hver linje i filen man arbejder med.

BEGIN { print "Her begynder vi:" }

{ print $1 }

END { print "Saa er vi faerdige!" }



[-----------------------------
[ $ cat 02_line_numbers.awk ]

#Line numbers
#Et eksempel der sÊtter linjenumre p en fil
#Og til sidst skriver antal linjer

BEGIN { linje = 0 }
{
print linje,"  ",$0;
linje++;
}
END { print "Antal linjer i filen", FILENAME linje }


[-----------------------------
[ $ cat 03_eregging.txt ]

Extended regular expressions i awk 

Som s mange andre steder, kan man bruge regexp i awk.
Her er et eksempel der printer f¯rste ord af alle linjer der indeholder g
 efterfulgt af k.

/g.*k/ { print $1 }

Her fÂr vi listet alle brugere, der bruger bash som shell:
awk '/bash/ { print $1 }' /etc/passwd


[-----------------------------
[ $ cat 04_for.awk ]

#Eksempel paa en for kontrolstruktur i awk

#I dette eksempel printes ordene i omvendt rÊkkef¯lge

#{
#for ( i = NF; i>=1; i--)
#print $i
#}

#Men hov! Det er jo ikke pÊnt med linebreaks for hvert ord.
#awk har en smart printf, hvor man ligesom i c, kan printe lidt mere avanceret:

{
for ( i = NF; i>=1; i--)
printf "%s ", $i;

print "\n";
}

Leave a Reply

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *