Ero sivun ”Awk” versioiden välillä
Siirry navigaatioon
Siirry hakuun
wikitystä, joku awk:ta osaava voisi selkeyttää edelleen
p (linkit laajoihin manuaalisivuihin) |
Pb (keskustelu | muokkaukset) (wikitystä, joku awk:ta osaava voisi selkeyttää edelleen) |
||
Rivi 1: | Rivi 1: | ||
'''awk'''- ohjelmointikielen avulla | '''awk'''-ohjelmointikielen avulla voi helposti muuntaa tekstitiedoston rakennetta. awk ja sen laajennettu versio gawk kuuluvat Unix/Linux-käyttäjän perustyökaluihin silloin, kun kyseessä on: | ||
* | * puhtaan tekstitiedoston muuntaminen riveittäin toiseen muotoon | ||
* | * rivien suodattaminen pois tekstistä tavalla, johon [[grep]] ei kykene | ||
* | * laskujen laskeminen riveillä olevilla numeroilla | ||
== Käyttö == | |||
Tiedostoa data.txt, jonka sisältö on seuraava: | |||
1 2 3 | 1 2 3 | ||
4 5 6 | 4 5 6 | ||
7 8 9 | 7 8 9 | ||
käsitellään seuraavanlaisen awk-ohjelman avulla: | |||
# tämä on awk ohjelma apu.awk | # tämä on awk ohjelma apu.awk | ||
# tämä begin lohko ajetaan kerran | # tämä begin-lohko ajetaan aluksi kerran | ||
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 | # 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 | # vain riville joka alkaa numerolla 4. Ilman ehtoa se ajetaan kaikille riveille | ||
{ | { | ||
Rivi 30: | Rivi 31: | ||
} | } | ||
Kun tiedosto data.txt syötetään ylläkuvatulle awk-ohjelmalle komennolla | |||
awk -f apu.awk <data.txt</tt> | |||
on tulos seuraava: | |||
alkutemput | alkutemput | ||
---------- | ---------- | ||
Rivi 40: | Rivi 46: | ||
Seuraavalla komennolla etsitään pieniä, alle 100 merkin tiedostoja /etc-hakemistosta: | |||
ls -l /etc |awk '$5 < 100 {printf "%6s %s\n",$5,$8}' | ls -l /etc |awk '$5 < 100 {printf "%6s %s\n",$5,$8}' | ||
Edellä olevista esimerkeistä voi huomata että awk: | Edellä olevista esimerkeistä voi huomata, että awk:n syntaksi on lähellä C:n syntaksia. Aloittelija saattaa kuitenkin yllättyä siitä että: | ||
* muuttujilla ei ole tyyppiä ja muunnokset tehdään automaattisesti. | * muuttujilla ei ole tyyppiä ja muunnokset tehdään automaattisesti. | ||
* | * taulukkoindekseinä voi käyttää periaatteessa mitä tahansa, tästä on paljon hyötyä niissä tehtävissä, joihin awk on ensisijaisesti tarkoitettu | ||
* syöttödata pilkotaan automaattisesti $1..n numeroiduiksi kentiksi yleensä välilyönnin kohdalta. | * syöttödata pilkotaan automaattisesti $1..n numeroiduiksi kentiksi yleensä välilyönnin kohdalta. | ||
* | * virheilmoitusten tulkinta voi olla hankalaa | ||
Awk: | Awk:n 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 | Awk-ohjelmissa ei ole yleensä mitään rajoitusta käsiteltä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 megatavuja). | ||
== Linkkejä == | == Linkkejä == | ||
http://www.cs.uu.nl/~piet/docs/nawk/nawk_toc.html | *[http://www.cs.uu.nl/~piet/docs/nawk/nawk_toc.html Awk-opas] | ||
http://www.cs.utah.edu/dept/old/texinfo/gawk/gawk_toc.html | *[http://www.cs.utah.edu/dept/old/texinfo/gawk/gawk_toc.html Gawk-opas] | ||