Ero sivun ”Awk” versioiden välillä
p (awk sivu luotu) |
|||
Rivi 7: | Rivi 7: | ||
== Esimerkkejä miten awkia käytetään == | == Esimerkkejä miten awkia käytetään == | ||
Tiedoston data.txt sisältö on: | Tiedoston data.txt sisältö on: | ||
Rivi 15: | Rivi 13: | ||
7 8 9 | 7 8 9 | ||
# tämä on awk ohjelma apu.awk | |||
# tämä begin lohko ajetaan kerran aluksi | |||
BEGIN { | BEGIN { | ||
printf("alkutemput\n---------\n"); | printf("alkutemput\n---------\n"); | ||
} | } | ||
# tässä välissä on varsinainen awk ohjelmien 'äly'. Näitä lohkoja | |||
# voi olla useita, ja niiden eteen voi laittaa ehdon jolla ko. rivi ajetaan | |||
# jos alla olevan lohkon alun muuttaisi $1 == 4 { niin lohko ajettaisiin | |||
# vain riville joka alkaa numerolla 4. Ilman ehtoa se ajetaan kaikille riveille | |||
{ | { | ||
printf "[%s] [%s] [%s] -> %d\n",$1,$2,$3,$1+$2+$3 | printf "[%s] [%s] [%s] -> %d\n",$1,$2,$3,$1+$2+$3 | ||
} | } | ||
# tämä end lohko ajetaan kerran lopuksi | |||
END { | END { | ||
printf("---------\nlopputemput\n"); | printf("---------\nlopputemput\n"); | ||
} | } | ||
Komento <tt>awk -f apu.awk <data.txt</tt> tuottaa tällaisen: | |||
alkutemput | alkutemput | ||
---------- | ---------- |
Versio 1. huhtikuuta 2006 kello 09.21
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
Tiedoston data.txt sisältö on: 1 2 3 4 5 6 7 8 9
# tämä on awk ohjelma apu.awk # tämä begin lohko ajetaan kerran aluksi BEGIN { printf("alkutemput\n---------\n"); } # tässä välissä on varsinainen awk ohjelmien 'äly'. Näitä lohkoja # voi olla useita, ja niiden eteen voi laittaa ehdon jolla ko. rivi ajetaan # jos alla olevan lohkon alun muuttaisi $1 == 4 { niin lohko ajettaisiin # vain riville joka alkaa numerolla 4. Ilman ehtoa se ajetaan kaikille riveille { printf "[%s] [%s] [%s] -> %d\n",$1,$2,$3,$1+$2+$3 } # tämä end lohko ajetaan kerran lopuksi END { printf("---------\nlopputemput\n"); }
Komento awk -f apu.awk <data.txt tuottaa tällaisen:
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).