AWKing

[-----------------------------
[ $ 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

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>