[-----------------------------
[ $ cat 00_intro.txt ]
AWKing af Lars Sommer, [email protected]
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";
}