Unix ja shell-ohjelmointi 2001, demo 5 Unix ja shell-ohjelmointi 2001, demo 5 (21.2.2001)

  1. Kirjoita skripti joka

    1. laskee montako merkkiä ja montako sanaa tiedostossa on keskimäärin per rivi (yhden desimaalin tarkkuudella).
    2. laskee eri kirjainten esiintymistiheydet tiedostossa prosentteina kahden desimaalin tarkkuudella.
    3. laskee annetun kirjainparin (kaksi eri kirjainta annetussa järjestyksessä) esiintymiskertojen määrän tiedostossa.
    4. etsii tiedostosta kymmenen yleisintä sanaa ja tulostaa ne sekä niiden lukumäärät ja prosenttiosuudet kolmen desimaalin tarkkuudella.

  2. Komento last tulostaa viimeiset koneeseen tapahtuneet loggaukset käänteisessä aikajärjestyksessä. Miten voisit laskea (siltä ajalta jonka last muistaa)

    1. kuinka monta loginia on tapahtunut kunakin päivämääränä?
    2. kuinka monta loginia on tapahtunut kussakin kuussa?
    3. kuinka monta kertaa kukin käyttäjä on yhteensä logannut sisään?
    4. kuinka monta eri käyttäjää on keskimäärin logannut sisään kunakin viikonpäivänä?

    1. Kirjoita skripti joka etsii pienimmän annettua rajaa (oletus 499) suuremman UID:n jota ei ennestään ole /etc/passwd:ssa.
    2. Kirjoita skripti, joka transponoi tiedostona annetun matriisin (vaihtaa rivit sarakkeiksi):

      1 2 3 1 4 7 10
      4 5 6 :stä tulisi 2 5 8 11
      7 8 9 3 6 9 12
      10 11 12

  3. Kirjoita skripti joka toimii yksinkertaisena makroprosessorina tulkiten seuraavanlaista kieltä:
    jos rivi on muotoa
    %DEFINE name text
    se määrittelee makron name arvoksi text, ja kaikilla sitä seuraavilla riveillä %name% korvataan textillä.

    Esim. syöttötiedostosta

    %DEFINE kieli latina
    %DEFINE kissa felis domesticus
    Kissa on %kieli%ksi "%kissa%"!

    se tulostaisi
    Kissa on latinaksi "felis domesticus"!

  4. Tiedostossa on seuraavannäköistä tietoa koneiden nimistä ja osoitteista:
    euler.it                IN        A         130.234.160.43
    ; vanha nimbus
                            IN        HINFO     HP-9000/835 UNIX
                            INFO      "Tietotekniikka AgC425.1"
                            ALIAS     euler.mit
                            ALIAS     nimbus1.mit
                            ETHER     08000902ED2B
                            IN        MX        0 badmail.it
    
    Puolipisteellä alkavat rivit ovat kommentteja, sisennetyille riveille koneen nimeksi otetaan sama kuin edelliselle (eli sama kuin lähinnä edellisellä sisentämättömällä ei-kommenttirivillä). Sisennykset ja kenttien välit voivat olla välilyöntejä tai tabulaattoreita.

    IP-osoitteet ovat aina 'IN A' -rivin viimeisenä kenttänä, neljänä pisteellä erotettuna lukuna väliltä 0-255.

    Kirjoita skripti freeip, joka etsii tiedostosta käyttämättömät osoitteet annetulta alueelta. Haluttu osoitealue annetaan argumenttina tyyliin
    freeip 192.168.1.1-128
    siis (vain) viimeinen osa välinä.

    Oletuksena käytetään alkuosalle arvoa 130.234. (siis freeip 160.25-128 olisi sama kuin freeip 130.234.160.25-128) ja jos viimeinen osa jätetään pois, oletetaan 25-255 (vain toiseksi viimeinen osa on pakollinen).

  5. Tiedostossa on seuraavannäköistä dataa:
    KEY ALPHA 3
    KEY BETA 1
    ALPHA note 1 and some junk
    GAMMA junk
    BETA something
    DELTA who cares about this
    KEY DELTA 4
    ALPHA me too
    KEY BETA 0
    DELTA this is important (maybe)
    BETA this is junk
    ...
    
    Kirjoita skripti joka käsittelee sitä seuraavasti:

    Sanalla KEY alkavat rivit määräävät, montako kenttää vastaavalla avaimella alkavilta riveiltä sen jälkeen pitää tulostaa Esim. KEY ALPHA 2 tarkoittaa, että sen jälkeen tulevilta ALPHA-alkuisilta riveiltä tulostetaan kaksi ensimmäistä kenttää (mukaanlukien ALPHA itse) riveiltä pitää tulostaa, KEY BETA 0 että BETA-alkuisilta riveiltä ei tulosteta mitään. Tuosta esimerkistä siis tulostuisi

    ALPHA note 1
    BETA
    ALPHA me too
    DELTA this is important
    
    Erilaisia avaimia ja kenttiä voi olla mielivaltainen määrä ja niissä voi olla mitä tahansa näkyviä merkkejä (ei välilyöntejä, tabulaattoreita eikä rivinvaihtoja). Kenttien välissä on vain välilyöntejä.


File translated from TEX by TTH, version 1.98.
On 16 Feb 2001, 08:56.