|
|
Rivi 1: |
Rivi 1: |
| '''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
| |
| 4 5 6
| |
| 7 8 9
| |
|
| |
| käsitellään seuraavanlaisen awk-ohjelman avulla:
| |
|
| |
| # tämä on awk ohjelma apu.awk
| |
| # tämä begin-lohko ajetaan aluksi kerran
| |
| 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");
| |
| }
| |
|
| |
| Kun tiedosto data.txt syötetään ylläkuvatulle awk-ohjelmalle komennolla
| |
|
| |
| awk -f apu.awk <data.txt</tt>
| |
|
| |
| on tulos seuraava:
| |
|
| |
| alkutemput
| |
| ----------
| |
| [1] [2] [3] -> 6
| |
| [4] [5] [6] -> 15
| |
| [7] [8] [9] -> 24
| |
| ----------
| |
| lopputemput
| |
|
| |
|
| |
| Seuraavalla komennolla etsitään 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:n 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ää 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.
| |
| * virheilmoitusten tulkinta voi olla hankalaa
| |
|
| |
| 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 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ä ==
| |
|
| |
| *[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 Gawk-opas]
| |
|
| |
|
| |
|
| |
| [[Luokka:Komentorivi]]
| |
| [[Luokka:Ohjelmat]]
| |