Ero sivun ”Awk” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(wikitystä, joku awk:ta osaava voisi selkeyttää edelleen)
Ei muokkausyhteenvetoa
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]]

Versio 5. tammikuuta 2007 kello 11.23