Awk
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).