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.

  1. Kirjoita skripti, joka

    1. tulostaa tiedostosta rivit, joissa on pariton määrä tuplalainausmerkkejä ("). (2p)
    2. 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)

    3. tulostaa annettujen tiedostojen viimeiset rivit (argumenttina tiedostonimet, tulostuksena vain kunkin tiedoston viimeinen rivi). (2p)

  2. Kirjoita skripti, joka

    1. laskee annetun hakemistopuun (rekursiivisesti argumenttina annetun hakemiston alta) tavallisten tiedostojen lukumäärän ja keskimääräisen koon tavuina kahden desimaalin tarkkuudella. (3p)
    2. 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)

  3. Kirjoita skripti, joka

    1. 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)
    2. 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)

  4. 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)

  5. 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.