Awk

Linux.fista
Versio hetkellä 31. maaliskuuta 2006 kello 23.16 – tehnyt Risto (keskustelu | muokkaukset) (awk sivu luotu)
Siirry navigaatioon Siirry hakuun

awk- ohjelmointikielen avulla voit helposti muuntaa tekstitiedoston rakennetta. awk ja sen laajennettu versio gawk kuuluvat unix/linux käyttäjän perustyökaluihin silloin kun sinun tarvitsee:

  • muuntaa puhdas tekstitiedosto riveittäin toiseen muotoon
  • suodattaa tekstistä rivejä pois tavalla johon [grep] ei kykene
  • laskea laskuja riveillä olevista numeroista


Esimerkkejä miten awkia käytetään

Laskuesimerkki

Tiedoston data.txt sisältö on:
1 2 3
4 5 6
7 8 9
niin awk ohjelma apu.awk:
BEGIN {
   printf("alkutemput\n---------\n");
}
{
 printf "[%s] [%s] [%s] ->  %d\n",$1,$2,$3,$1+$2+$3
}
END {
    printf("---------\nlopputemput\n");
}

muuntaa sen komennolla 'awk -f apu.awk <data.txt' muotoon:

alkutemput
----------
[1] [2] [3] ->  6
[4] [5] [6] ->  15
[7] [8] [9] ->  24
----------
lopputemput


Tällä komennolla etsit pieniä alle 100 merkin tiedostoja /etc hakemistosta:

ls -l /etc |awk '$5 < 100 {printf "%6s %s\n",$5,$8}'

Edellä olevista esimerkeistä voi huomata että awk:in syntaksi on lähellä C:n syntaksia. Aloittelija saattaa kuitenkin yllättyä siitä että:

  • muuttujilla ei ole tyyppiä ja muunnokset tehdään automaattisesti.
  • Taulukkoindekseinä voi käyttää 'mitä tahansa', tästä on paljon hyötyä siinä mihin awk on tarkoitettu
  • syöttödata pilkotaan automaattisesti $1..n numeroiduiksi kentiksi yleensä välilyönnin kohdalta.
  • virheilmoituksien tulkinta voi olla hankalaa

Awk:ia on sanottu joskus olevan 'write only language', ja sitä se onkin jos yrittää saada todella monimutkaisesta awk ohjelmasta selkoa. Omat ohjelmat kannattaa tehdä siten että kirjoittaa ja testaa ohjelman rivi kerrallaan. awk on parhaimmillaan lyhyissä muutaman rivin ohjelmissa.

Awk ohjelmissa ei ole yleensä mitään rajoitusta käsiteltävävien tiedostojen koolle koska niitä käsitellään vain riveinä ja syöttö/tulostus putkina/virtoina. awk ohjelmat pystyvät käsittelemään varsin helposti hyvinkin suuria syöttö/tulostustiedostoja (satoja megoja).