Unix ja shell-ohjelmointi 27.4.2001
Unix ja shell-ohjelmointi 27.4.2001
Huom. Ratkaisuissa saa käyttää vain luennoilla esiteltyjä komentoja,
ei perliä tai komentojen Gnu- tai Linux-spesifisiä ominaisuuksia.
- Kirjoita skripti, joka
- tulostaa tiedostosta rivit, joissa on pariton määrä
tuplalainausmerkkejä (").
(2p)
-
lukee stdinistä amerikkalaistyylisen MM/DD/YY -päiväyksen
ja muuttaa sen suomalaiseen DD.MM.YY -muotoon.
Vuosiluku voi olla kaksi- tai nelinumeroinen ja päivässä ja kuukaudessa
voi olla tai olla olematta alkunollia.
Päivämäärän oikeellisuutta ei tarvitse tarkistaa.
(2p)
-
tulostaa annettujen tiedostojen viimeiset rivit
(argumenttina tiedostonimet, tulostuksena vain kunkin
tiedoston viimeinen rivi).
(2p)
- Kirjoita skripti, joka
- laskee annetun hakemistopuun (rekursiivisesti argumenttina
annetun hakemiston alta) tavallisten tiedostojen lukumäärän
ja keskimääräisen koon tavuina kahden desimaalin tarkkuudella.
(3p)
-
lukee stdinistä tiedostonimiä, laskee kunkin tiedoston rivimäärän
ja listaa ne pituusjärjestyksessä (tulostukseen kunkin
tiedoston pituus riveinä ja tiedostonimi), lyhimmästä pisimpään.
(3p)
- Kirjoita skripti, joka
- lajittelee amerikkalaistyylisiä hh:mm am/pm-kellonaikoja
sisältävän tiedoston
(yksi per rivi) aikajärjestykseen. Tunneissa ei ole alkunollia
ja minuuttien jäljessä on tasan yksi tyhjä.
(Huom. 12 am on puoliyö ja 12 pm keskipäivä; tuntia 0 ei ole.)
Testaukseen on ohessa tiedosto
~/data/ustimes.txt ja sama lajiteltuna
~/data/ustimes.sorted.
(3p)
-
etsii annetun käyttäjän kotihakemiston alta rekursiivisesti
kaikki tiedostot, joihin on kirjoitusoikeus sellaisella ryhmällä,
johon ko. käyttäjä ei kuulu.
(3p)
- Kirjoita skripti, joka etsii annetusta hakemistopuusta rekursiivisesti
ei-siirrettävät tiedostonimet ja muuttaa ne siirrettäviksi.
Siirrettävässä nimessä saa olla vain ASCII-kirjaimia (a-z, A-Z), numeroita 0-9,
pisteitä tai tavu- tai alaviivoja, paitsi ensimmäinen ei saa olla tavuviiva,
ja se saa olla enintään 14 merkkiä pitkä.
Virheelliset merkit nimissä pitää muuttaa alaviivoiksi ja
ylipitkät nimet katkaista.
Jos muuten syntyisi useita samannimisiä, loppuun pitää lisätä
numeroita (tarvittaessa lyhentäen ensin).
Lisäksi sen pitää tuntea optiot -r
scriptfile, jolla se kirjoittaa tiedostoon scriptfile
skriptin jolla nimet voi muuttaa takaisin, sekä -t jolla
se vain tulostaa mitä tekisi muttei muuta mitään.
(6p)
- Kahdessa tiedostossa on aikaleimattuja rivejä muotoa
MMM DD hh:mm:ss ...
missä MMM on kuukauden kolmikirjaiminen englanninkielinen lyhenne,
DD kuukaudenpäivä,
hh:mm:ss kellonaika ja ... mielivaltaista tekstiä.
Rivit ovat aikajärjestyksessä (kummassakin tiedostossa).
Vuosilukuja ei ole, mutta kummassakin esiintyy samat vuodet
ja ainakin yksi rivi jokaisesta niissä esiintyvästä vuodesta.
Kirjoita skripti, joka yhdistää ko. tiedostot siten, että
rivit pysyvät aikajärjestyksessä.
Testaukseen voit käyttää oheisia tiedostoja
~/data/log1.txt
ja ~/data/log2.txt
ja niistä haluttua tulosta ~/data/logs.merged.
(6p)
File translated from TEX by TTH, version 1.98.
On 26 Apr 2001, 19:35.