Kieliteknologian ATK-ympäristö Neljäs luento Miikka Silfverberg Nykykielten laitos 27. syyskuuta 2010 Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 1 / 13
Neljäs luento Prosessit ps, jobs. käynnistäminen taustalle. taustalla olevan prosessin siirtäminen etualalle. tappaminen. Yksinkertaista tekstinkäsittelyä egrep, sort, uniq, tr. Tulosteen ja syötteen ohjaaminen. Putkittaminen. Skriptit. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 2 / 13
Prosessit Usein on kätevää voida käyttää emacsia ja komentotulkkia samaan aikaan. emacsin sisään voi käynnistää komentotulkin komennolla M-x shell, mutta toinen tapa on käynnistää emacs taustalle. $ emacs mehiläisten elämä.txt & Yleensäkin käskyn voi suorittaa taustalla liittämällä käskyn perään &-merkin. Tekstipohjaista emacsia ei voi käyttää samaan aikaan kuin komentotulkkia, koska kumpikin toimii samassa ikkunassa. Kuitenkin emacsin voi väliaikaisesti pysäyttää komennolla C-z ja käynnistää uudelleen komentotulkista komennolla fg. Tämä ei ole emacsin erityisominausuus, vaan minkä vaan prosessin (vaikkapa lessin) voi pysäyttää komennolla C-z ja käynnistää uudelleen komennolla fg. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 3 / 13
Prosessit Käskyillä ps ja jobs tarkastellaan mitä prosesseja käyttäjä itse on käynnistnyt $ ps PID TTY TIME CMD 1934 pts/0 00:00:01 bash 1974 pts/0 00:03:37 emacs 2159 pts/0 00:00:22 xpdf.bin 3829 pts/0 00:00:00 ps $ jobs [1]- Running emacs luento3.tex & [2]+ Running xpdf luento3.pdf & Komento fg tuo prosessin etualalle. fg emacs fg 1 Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 4 / 13
Prosessit Prosessi tapetaan käskyillä kill ja killall. $ ps PID TTY TIME CMD 1934 pts/0 00:00:01 bash 1974 pts/0 00:03:37 emacs 2159 pts/0 00:00:22 xpdf.bin 3829 pts/0 00:00:00 ps $ kill 1974 $ killall emacs Joskus prosessi ei vaan suostu kuolemaan nätisti, jolloin voi sanoa $ kill -9 1974 $ killall -9 emacs Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 5 / 13
Yksinkertaista tekstinkäsittelyä egrep egrep etsii rivit joilla esiintyy jokin merkkijono. $ egrep Kuningatar mehiläisten elämä.txt Kuningatar on jälleen ryhtynyt munimaan jo pehmenee ja menettää muotonsa. Kuningatar, joka ei $ egrep kukkien tuoksu mehiläisten elämä.txt jättää hyvästi päivänvalon, kukkien tuoksun egrepillä voi hakea myös merkkijonoa yleisemmällä hakuehdolla n.s. säännöllisellä lausekkeella. $ egrep kuningatar [^ ]* on mehiläisten elämä.txt johon kuningatar äsken on asettunut kultanaulan jonka kuningatar äsken on sinne muninut. Tästä Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 6 / 13
Yksinkertaista tekstinkäsittelyä sort ja uniq sort järjestää tiedoston rivit aakkosjärjestykseen. $ sort mehiläisten elämä.txt ansoihin, mutta ei ole uskomatonta, että ansoja? Emmekö ole tarvinneet tuhansia antaa meille varman ja syvän vastauksen sort -n järjestää rivit numerojärjestykseen, sort -r käänteiseen järjestykseen ja sort -n -r käänteiseen numerojärjestykseen. uniq poistaa peräkkäisistä samanlaisista riveistä kaikki paitsi ensimmäisen. uniq -c tekee saman kuin uniq mutta kirjoittaa rivin alkuun kuinka monta samanlaista riviä syötteessä oli. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 7 / 13
Yksinkertaista tekstinkäsittelyä tr tr muuttaa merkkejä toisiksi merkeiksi $ cat mehiläisten elämä.txt tr A-ZÅÄÖ a-zåäö ja rakastaa. en aio koristaa totuutta enkä $ cat mehiläisten elämä.txt tr -d \r Tällä käskyllä poistetaan rivinalkuunpalautusmerkit \r (ne samat jotka emacsissa näkyvät ^M-merkkeinä). tr ei osaa käsitellä tiedostoa suoraan. Sille voi sen sijaan esim. putkittaa cat-käskyn tulosteen -merkkiä käyttäen. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 8 / 13
Tulosteen ja syötteen ohjaaminen Unixixssa on standardi- ja virhetulostevirrat. Nämä voi ohjata tiedostoon käyttämällä ohjausmerkkejä > ja 2> $ cat mehiläisten elämä.txt tr A-ZÅÄÖ a-zåäö > mehiläisten elämä.txt.pieni $ tr A-Z a-z mehiläisten elämä.txt 2> virhe $ cat virhe tr: extra operand mehiläisten elämä.txt Lisätietoja saa komennolla tr --help. Kun tuloste ohjataan tiedostoon merkillä > tai 2>, niin tiedoston alkuperäinen sisältö häviää. Jos alkuperäinen sisältö halutaan säilyttää pitää käyttää ohjausmerkkejä >> ja 2>>. $ tr A-Z a-z mehiläisten elämä.txt 2>> virhe Käsky säilyttää alkuperäisen virheilmoituksen joka virhe-tiedostossa jo oli ja kirjoittaa sen perään uuden virheilmoituksen. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 9 / 13
Tulosteen ja syötteen ohjaaminen Standardisyötteen voi ohjata tulemaan tiedostosta ohjausmerkillä <. $ tr A-ZÅÄÖ a-zåäö < mehiläisten elämä.txt ja rakastaa. en aio koristaa totuutta enkä Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 10 / 13
Putkittaminen Kun kaksi käskyä putkitetaan, jälkimmäinen käsky käsittelee ensimmäisen tulostetta eli saa syötteekseen ensimmäisen käskyn tulosteen. $ cat mehiläisten elämä.txt tr A-ZÅÄÖ a-zåäö $ cat mehiläisten elämä.txt tr -s \t\r \n tr A-ZÅÄÖ a-zåäö sort uniq -c sort -nr > mehiläisten elämä.txt.freq Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 11 / 13
Yksinkertaiset skriptit Kirjoitetaan emacsilla tiedosto laske frekvenssi.sh. $ cat laske frekvenssi.sh #! /bin/bash tr \t\r \n tr A-ZÅÄÖ a-zåäö sort uniq -c sort -nr Annetaan tiedostolle suorituoikeus ja lasketaan tiedoston lyhyitä kertomuksia.txt frekvenssilista. $ chmod u+x laske frekvenssi.sh $ cat lyhyitä kertomuksia.txt./laske frevenssi.sh Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 12 / 13
Yksinkertaiset skriptit Skriptissä standarditulosteen voi ohjata paitsi tiedostoon, myös virhetulostusvirtaan. echo-käsky tulostaa tavallisesti standarditulosteeseen, mutta sen saa tulostamaan myös virhetulosteeseen käyttämällä ohjausmerkkiä 1>&2. echo Nyt sattui virhe! 1>&2 Skriptistä myös virhetulosteen voi ohjata standarditulosteeseen käyttämällä ohjausmerkkiä 2>&1. Tästä tosin lienee aika vähän hyötyä. tr A-Z 2>&1 Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010 13 / 13