1.1 Tekstinprosessointiohjelmien yleinen toimintatapa (1)

Samankaltaiset tiedostot
CLT131 Korpusten käsittely

Luento 5. Timo Savola. 28. huhtikuuta 2006

Korpusten käsittely clt131, P Luento 3

Komentotulkki. Kysymyksiä

Kieliteknologian ATK-ympäristö Neljäs luento

Korpusten käsittely clt131, P Luento 1

Sekalaisia selvennyksiä

Ctl160 Tekstikorpusten tietojenkäsittely

Ctl160 Tekstikorpusten tietojenkäsittely p.1/24

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Korpusten käsittely clt131, P Luento 4

Luento 4. Timo Savola. 21. huhtikuuta 2006

CLT131: Tekstityökalut 2011, toinen luento

Kieliteknologian ATK-ympäristö Toinen luento

Korpusten käsittely clt131, P Luento 5

CLT131 Korpusten käsittely (3op)

Sisällys. Johdatus Linux/Unixiin: Osa 2. Prosessin tilat. Prosessien hallinta. Prosessien monitorointi

linux: Prosessit kill PID lopettaa prosessin PID, jos siihen on oikeudet Ctrl + c lopettaa aktiivisen prosessin L7: linux

Ohjelmoinnin perusteet Y Python

Kieliteknologian ATK-ympäristö Viides luento

Kieliteknologian ATK-ympäristö Viides luento

linux: Ympäristömuuttujat

[Jnix näyttökoe. o ei ole sallittua käyttää mitään verkkolevyjakoa tai mitään siihen rinnastettavaa järjestelmdä.

Kieliteknologian ATK-ympäristö Kuudes luento

Ohjelmoinnin perusteet Y Python

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Tekstinkäsittelyn jatko KSAO Liiketalous 1. Osanvaihto näkyy näytöllä vaakasuorana kaksoispisteviivarivinä ja keskellä riviä lukee osanvaihdon tyyppi

CLT131: Tekstityökalut 2011, seitsemäs luento

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

CLT131: Tekstityökalut 2011, kuudes luento

Luento 3. Timo Savola. 7. huhtikuuta 2006

Ohjelmoinnin perusteet Y Python

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Perusohje vi-editorin käyttöön

Ohjelmoinnin perusteet Y Python

Ctl160 Tekstikorpusten tietojenkäsittely p.1/28

Lupa opetuskäyttöön pyydettävä. Näppäimistö. Kohdistimen ohjausnäppäimistö. Funktionäppäimistö. Kirjoitusnäppäimistö

Säännöllisistä lausekkeista

CLT131: Tekstityökalut 2010, toinen luento

Johdatus Ohjelmointiin

Ohjelmoinnin perusteet Y Python

Asialista. hippu ja.bashrc. Asialista. Tutkimusongelma: tekstin morfologisen jäsennyksen selvittely

Ohjelmoinnin perusteet Y Python

14. Hyvä ohjelmointitapa 14.1

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä

CLT131: Tekstityökalut 2010, kuudes luento

1.1 Yleistä kurssista

Kieliteknologian ATK-ympäristö Kolmas luento

Unix. Markus Norrena

CLT131: Tekstityökalut 2010, neljäs luento

Työvälineohjelmistot KSAO Liiketalous 1

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

CLT131: Tekstityökalut 2011, viides luento

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Vesa Ollikainen, päivitys Juha Haataja

DOORSin Spreadsheet export/import

Metropolia Ammattikorkeakoulu

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

SCI- A0000: Tutustuminen Linuxiin, syksy 2015

Ohjelmoinnin perusteet Y Python

SUOMEN PANKKIYHDISTYS

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento,

Ohjelmoinnin perusteet Y Python

5. HelloWorld-ohjelma 5.1

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

FrontPage Näkymät

KÄYTTÖOHJE LATOMO VERSO

Verkkokirjoittaminen. Anna Perttilä Tarja Chydenius

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

Ohjelmoinnin perusteet Y Python

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Ohjelma on tarkoitettu pankkiyhteysohjelmalla vastaanotettujen Finvoiceverkkolaskujen

AutoFutur ja KoneFutur. Asiakastyytyväisyyskysely- palvelu. Käyttöohje

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Tekstinkäsittely 1. Peruskäyttö. Tietotekniikan perusteet Metropolia Ammattikorkeakoulu Vesa Ollikainen

Pikanäppäin Yhdistelmiä. Luku 6 Pikanäppäimet

MITÄ JAVASCRIPT ON?...3

Ohjelmoinnin perusteet Y Python

Asialista. CLT131: Tekstityökalut 2010, kolmas luento. Laskuharjoitusaikataulut. Harjoituksissa havaitut virheet. Käytännön asiat/kertaus

Asiointipalvelun ohje

Harjoitus 2 (viikko 45)

Sangen lyhyt L A T E X-johdatus

Luottamuksellinen sähköposti Lapin yliopistossa. Ilmoitusviesti

ASCII-taidetta. Intro: Python

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

13. Hyvä ohjelmointitapa (osa 1) 13.1

YHTEYDEN OTTAMINEN CSC:N KONEELLE HIPPU

SYÖTTÖPOHJA LUKUJEN SYÖTTÖÖN ERI TARKOITUKSIIN

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Yhdistäminen. Tietolähteen luominen. Word-taulukko. Joukkokirje, osoitetarrat Työvälineohjelmistot 1(5)

Asialista. CLT131: Tekstityökalut 2010, neljäs luento. Lähiaikataulu. Asialista. Käytännön asiat

Transkriptio:

1 Tekstinprosessointiohjelmat 1.1 1.1 Tekstinprosessointiohjelmien yleinen toimintatapa (1) Useimmat tekstinprosessointiohjelmat (cat, grep,... ) toimivat kahdella erilaisella tavalla. Jos niille annetaan tiedostojen nimiä argumenteiksi, ne lukevat syötteensä kyseisistä tiedostoista, esim. grep misu juttu.txt. Sen sijaan jos niille ei kerrota yhtäkään tiedostonimeä, ne lukevat syötteensä vakiosyötteestä (standard input). Komentotulkki määrää, mistä vakiosyöte varsinaisesti tulee. Oletuksena vakiosyöte tulee suoraan käyttäjältä. Tästä syystä esimerkiksi komento grep foo hakee foo-sanoja käyttäjän kirjoituksesta. Syötteen loppumisesta voi ilmoittaa painamalla C-d.

1 Tekstinprosessointiohjelmat 1.2 1.2 Virroista (1) Vakiosyöte on yksi esimerkki vakiovirroista. Virrat ovat ikään kuin kanavia, joita pitkin kulkee tekstiä. Muita vakiovirtoja ovat vakiotuloste ja vakiovirhe. Vakiovirtojen idea on siinä, että ohjelma voi sokkona lukea syötettä, tuottaa tulostetta ja kirjoittaa virheilmoituksia tietämättä, mistä syöte oikeasti tulee tai mihin tuloste / virheilmoitukset oikeasti menevät. Oletuksena vakiosyöte tulee yksinkertaisesti käyttäjältä ja vakiotuloste ja -virhe menevät käyttäjän näytölle luettaviksi. Esimerkiksi cat -n (ilman muita argumentteja) lukee käyttäjältä syötettä linja kerrallaan ja näyttää linjat numeroituina.

1 Tekstinprosessointiohjelmat 1.2 Komentotulkin ohjaustoiminnoilla esim. syötteen voi yhtä hyvin antaa ohjelmalle tiedostosta tai vaikkapa toisen ohjelman tulosteesta. Meillä on jo käsiteltykin tulosteen ohjaus tiedostoon (>- ja >>-rakenteet). Tämä mahdollisuus ohjailla ohjelmien syötettä, tulostetta ja virheilmoituksia on tärkein ohjelmien yhdistelytapa Unixissa. Erityisen tärkeä on rakenne, jolla annetaan yhden ohjelman tuloste toisen syötteeksi. Tämän rakenteen nimi on putki ja sitä merkitään merkillä. Kaikki seuraavien kalvojen ohjelmat osaavat lukea myös vakiosyötettä, jos niille ei anneta yhtään tiedostoa argumentiksi.

1 Tekstinprosessointiohjelmat 1.3 1.3 cat, wc uudestaan cat [ -n ] [ -s ] tied1 tied2... (CATenate) Yhdistää peräkkäin argumentteina olevat tiedostot. Valitsimella -n (Numerate) numeroi rivit. Valitsimella -s (Squeeze) korvaa peräkkäiset tyhjät rivit yhdellä. wc [ -l ] [ -w ] [ -c ] [ -L ] tied1 tied2... (Word Count) Laskee rivit, sanat ja merkit argumenttitiedostoista ja näyttää tuloksen. Valitsimilla -l (Lines), -w (Words) ja -c (Characters) kertoo vain linjojen, sanojen tai merkkien määrän (vastaavasti). Valitsimella -L (Line) kertoo pisimmän rivin pituuden.

1 Tekstinprosessointiohjelmat 1.4 1.4 grep uudestaan grep [ -C n ] [ -v ] [ -x ] [ -i ] [ -o ] sana tied1 tied2... (Global RegExp Print) Etsii sanaa argumenttitiedostoista. Oletuksena tulostaa linjat, joilla kyseinen sana löytyy. Valitsimella -C (Context) tulostaa myös löydöslinjojen ympäriltä pari linjaa. Valitsimella -v (?) tulostaa kaikki linjat, joista sanaa ei löydy. Valitsimella -x (exact) tulostaa vain ne linjat, joilla on haettu sana eikä mitään muuta. Valitsimella -i (Insensitive) ei kiinnitä huomiota suurten ja pienten kirjainten eroon. Valitsimella -o (Only) tulostaa vain sen kohdan, joka täsmäsi (ei koko linjaa). grep -r sana hakemisto (Global RegExp Print / Recursive) Etsii sanaa rekursiivisesti kaikista hakemiston sisältämistä tiedostoista.

1 Tekstinprosessointiohjelmat 1.5 1.5 Uusia tekstinprosessointikomentoja head [ -n ] tied1 tied2... (HEAD of le) tail [ -n ] tied1 tied2... (TAIL of le) Näyttää n ensimmäistä (head) tai viimeistä (tail) riviä tiedostoista. Oletus 10 riviä. sort [ -n ] [ -r ] [ -k n ] tied1 tied2... (SORT) Järjestää argumenttitiedostojen rivit (oletuksena aakkosjärjestykseen). Valitsin -n (Numeric) tuottaa numeerisen järjestyksen; valitsin -r (Reverse) kääntää järjestyksen päinvastaiseksi; valitsimella -k (Key) voi valita, monennenko sanan mukaan järjestetään.

1 Tekstinprosessointiohjelmat 1.5 uniq [ -c ] [ -d ] tied (UNIQue lines) Näyttää argumenttitiedoston siten, että peräkkäiset samat linjat on poistettu. Valitsimella -c (Count) kertoo lisäksi, kuinka monta kertaa mikin linja oli syötteessä. Valitsimella -d (Duplicates) kertoo vain ne linjat, joita oli useampi kappale. cut [ -d merkki ] -f n tied1 tied2... (CUT elds) Näyttää argumenttitiedostot siten, että jokaisesta linjasta näytetään vain n:s kenttä (Field). Kenttäerottimena käytetään merkki:a (Delimiter), joka on oletuksena sarkain (tabulaattori). di [ -u ] tied1 tied2 (DIFFerence) Näyttää erot tied1 - ja tied2 -tiedostojen välillä.

1 Tekstinprosessointiohjelmat 1.6 1.6 tr kielitieteilijän perustyökalu Tämä on yksinkertaisuudessaan hämmentävän monipuolinen ohjelma. tr osaa lukea syötettä vain vakiosyötteestä, sille ei voi antaa argumentiksi tiedostonimiä. tr mistä mihin (TRanslitterate) Muuntaa syötteen mistä-merkit vastaaviksi mihin-merkeiksi. Esimerkiksi tr ab uo muuttaa kaikki a:t u:ksi ja b:t o:ksi. Merkkijoukoissa voi olla myös väliviivalla merkittyjä merkkivälejä, esim. tr A-M a-m muuntaa kaikki isot kirjaimet A:n ja M:n väliltä pieniksi. tr -d [ -c ] merkkejä (TRanslitterate / Delete) Poistaa syötteestä annetut merkit. Valitsimella -c (Complement) poistaa kaikki merkit paitsi annetut merkit. Myös tämä ymmärtää merkkivälejä.

1 Tekstinprosessointiohjelmat 1.6 tr -s merkkejä (TRanslitterate / Squeeze) Jos syötteestä löytyy useampia peräkkäisiä kappaleita jotain merkkiä, joka kuuluu annettuun merkkijoukkoon, ne korvataan yhdellä. tr:n vipusia voi myös yhdistää. Esimerkiksi tr -sc A-Za-z? korvaa kaikki yhden tai useamman merkin ei-kirjainjaksot kysymysmerkillä. Tärkeimpiä tr:n käytöistä lienee sanojen paneminen omille riveilleen. Se onnistuu komennolla tr " " \\012 joka siis muuttaa välilyönnit rivinvaihdoiksi. Tähän hipsujen käyttöön tutustutaan tuonnempana.

1 Tekstinprosessointiohjelmat 1.7 1.7 Tositoimiin: prosessointikomennot Ota jokin isohko tiedosto raakamateriaaliksesi. Jos sinulla ei ole sellaista, voit esim. hakea jonkin www-sivun komennolla wget, jos se löytyy järjestelmästä, tai kirjoittaa emacs-ohjelmalla jonkin tekstin. Etsi tiedostosta erilaisia sanoja sisältäviä linjoja grep-komennolla. Esim. grep -i and tiedosto.txt. Kokeile grep-komennon eri valitsimien vaikutusta lopputulokseen. Kokeile erilaisia merkkivaihdoksia ja -poistoja tr-komennolla. Esim. tr uio üíå <tiedosto.txt. Katso, mitä tiedostossa /etc/passwd on. Vertaa komennon cut -d: -f1 /etc/passwd tulokseen. Kokeile hakea muitakin kenttiä.

1 Tekstinprosessointiohjelmat 1.7 Näytä /etc/passwd käyttäjätunnusten mukaan aakkostettuna komennolla sort /etc/passwd ja nimien mukaan aakkostettuna komennolla sort -t: -k5 /etc/passwd. Kokeile sort-komennon eri valitsimien vaikutusta lopputulokseen. Anna komento grep 'a.*i' ja kirjoittele erilaisia sanoja kokeillaksesi, mihin grep tarttuu. Anna pelkkä komento cat -n ja kirjoittele kaikenlaista katsoaksesi, mitä se tekee. Tee cut-komennon eri valitsimilla raakamateriaalistasi erilaisia listittyjä versioita.

2 Vakiovirrat 2.1 2.1 Tekstinprosessointiohjelmien yleinen toimintatapa (2) Erityisesti tekstinprosessointiohjelmat, mutta usein Unixin muutkin ohjelmat, on suunniteltu toimimaan tarvittaessa lttereinä: ne ottavat vakiosyötteestä jotain, tekevät sille jonkin muunnoksen ja antavat tuloksen vakiotulosteeseen. Filttereistä pystyy rakentelemaan yhdistelemällä hyvinkin monimutkaisia kokonaisuuksia. Useimmat tekstinprosessointiohjelmat suostuvat lukemaan syötettä sekä joistain tiedostoista että vakiosyötteestä. Tällöin vakiosyötettä merkitään tiedostonimellä -. Esimerkiksi komento diff makkara - vertailee eroja makkaran ja vakiosyötteen välillä.

2 Vakiovirrat 2.2 2.2 Virroista (2) Vakiosyötteen ja -tulosteen pointti on siis se, että ne sallivat ohjelman toimia ltterinä, muunnoksena tiedolle, josta ei tiedetä, mistä se tulee, eikä mihin se menee. Vakiovirheen pointti on siinä, etteivät virheilmoitukset sotkeutuisi muuhun tulosteeseen, vaan ne voivat tulla suoraan käyttäjän nähtäviksi tai ohjata esim. tiedostoon tarkasteltaviksi. Vakiovirheen voi ohjata tiedostoon rakenteella 2> tiedosto, joka liitetään komennon perään samoin kuin >-ohjaus. Vakiosyötteen voi ohjata tiedostosta rakenteella < tiedosto.

2 Vakiovirrat 2.3 2.3 Putket Putkilla ltterikomennoista voi rakennella pitkiä tuotantolinjoja, joissa jokainen komento tekee oman hommansa ja lähettää tuloksensa taas eteenpäin seuraavalle komennolle. Putkia komentojen välille muodostetaan kirjoittamalla kaksi komentoa erotettuna putkimerkillä ( ). Esim. grep jukkeli foo.txt cat -n etsii foo.txt-tiedostosta jukkeli-sanaa ja lähettää tuloksen cat:lle numeroitavaksi. Putkimerkkiä kohden komentotulkki tekee siis kolme asiaa: perustaa putken, ohjaa edellisen käskyn tulosteen putkeen, ja ohjaa seuraavan käskyn syötteen putkesta.

3 Putkien käyttö 3.1 3.1 Putkikomentojen lukeminen Esimerkki: cat -n a.html grep href head -30 tail -1 Tämä komento näyttää a.html-tiedoston 30. linkin sekä rivin numeron, jolla kyseinen linkki sijaitsee. Mutta miten se toimii? cat -n lisää rivinumerot linjojen eteen. grep href etsii rivit, joilla esiintyy sana href, ts. rivit joilla on linkkejä. (Jos rivillä on useampi kuin kaksi linkkiä, ohjelmamme ei toimi oikein. Linkit pitää oikeasti rivittää tr:lla ensin.) head -30 jättää tästä jäljelle vain 30 ensimmäistä riviä. tail -1 poimii näistä vain viimeisen rivin, ts. grep:n tulosteen 30. rivin.

3 Putkien käyttö 3.1 Putkikomentojen ymmärtämisessä on usein hyödyllistä nähdä, millaista tekstiä kulkee minkäkin kahden komennon välillä. Tämä onnistuu siten, että kirjoittaa putkilinjan komento kerrallaan ja katsoa aina, millaista tulostetta syntyy missäkin vaiheessa. Sen sijaan halutun putkilinjan muodostaminen onkin vaikeampi homma: se edellyttää avointa ajattelua, erilaisten ratkaisumahdollisuuksien etsimistä. Yksi hyväksi havaittu tapa tehdä tätä on lisäillä putkilinjaan yksi komento kerrallaan sen mukaan, mikä näyttää vievän meitä lähemmäs ratkaisua. Tämä tietysti edellyttää intuitiota... Joitain nyrkkisääntöjä on: kun halutaan valita tiettyjä linjoja (selektio), grep on yleensä oikea vastaus; kun halutaan valita linjoista tietty osa (projektio), cut on yleensä oikea vastaus; ja kun halutaan muuttaa tiedon rakennetta, tr on yleensä oikea vastaus.

3 Putkien käyttö 3.2 3.2 Tyypillisiä linjan loppuun liitettäviä komentoja On monia komentoja, jotka on selkeästi suunniteltu putkilinjan lopettimiksi. Näistä ylivoimaisesti yleisin on less. Lisää komennon loppuun less jos haluat selailla tulosta edestakaisin. lpr, mpage tai a2ps on kätevä tapa tulostaa lopputulos. mail tyyppi@jossain lähettää tuloksen sähköpostiviestinä. head on näppärä tapa katsoa vain vähän, minkänäköistä tulosta putkilinja tuottaa.

3 Putkien käyttö 3.3 3.3 Välihuomatutus: lainaaminen Kuten huomattu, komentolinjat koostuvat jonosta sanoja. Joskus kuitenkin sanan pitää sisältää välilyöntejä, jos esimerkiksi nimeää tiedoston, jonka nimessä on välilyönti. Samoin erilaiset maagiset merkit, kuten <, >, ja *, halutaan joskus antaa komennolle sellaisinaan argumentiksi. Sekalaisesta merkkipötköstä voi tehdä yhden sanan panemalla sen hipsuihin (" tai '). Esimerkiksi merkkijonoa hui sentään voi etsiä komennolla grep 'hui sentään' tiedosto.

3 Putkien käyttö 3.4 3.4 Putkiesimerkkejä (1) ls wc -l Laskee, kuinka monta tiedostoa on oletushakemistossa. (Kun ls tulostaa muualle kuin näytölle, se tulostaa yhden tiedoston per rivi.) history grep ' ' less Antaa selailla, mitä putkikomentoja on antanut. cut -d: -f5 /etc/passwd sort Luettelee koneen käyttäjät aakkosjärjestyksessä. echo testausta mail -s koe hj@iki.fi Lähettää hj@iki.fi:lle viestin otsikolla koe joka sisältää vain sanan testausta.

3 Putkien käyttö 3.5 3.5 Putkiesimerkkejä (2) tr -s " " \\012 <aine.txt sort uniq fmt less Näyttää aakkosellisen listan tiedoston aine.txt sanoista. tr muuntaa välilyönnit rivinvaihdoiksi ja korvaa samalla useammat peräkkäiset rivinvaihdot yhdellä (jottei tule tyhjiä rivejä). sort järjestää sanat aakkosjärjestykseen ja siirtää ne samalla peräkkäin uniq:a varten. uniq jättää vain eroavat sanat jäljelle eli sanan toistot poistetaan. fmt uudelleenrivittää syötteen enintään 74-merkkisiksi riveiksi. less sallii tarkastella tulosta mukavasti.

3 Putkien käyttö 3.6 3.6 Putkiesimerkkejä (3) history grep " cd " sort -k 3 mpage -8 -Plp Tulostaa käytetyt cd-käskyt järjestettynä sen mukaan, mihin tiedostoon niillä on menty, 8 sivua yhdellä paperilla. history antaa käytetyt käskyt. grep valitsee niistä vain ne, joissa on sana cd. sort järjestelee ne kolmannen sanan mukaan (1. sana on historianumero, toinen cd-komento). mpage tekee niistä postscriptia (tiedostomuoto, jota tulostimet ymmärtävät) ja lähettää sen tulostimelle lp.

3 Putkien käyttö 3.7 3.7 Tositoimiin: putket Näissäkin tarvitset jonkin raakamateriaalitiedoston... Rivitä tiedoston sanat tr-komennolla: tr " " \\012 <tiedosto.txt Lisää tämän perään erilaisia putkeksi erilaisia tr-komentoja, joilla saat poistetuksi sanoista suurien ja pienten kirjainten erot, välimerkit, ja niin edelleen. Kokeile myös tutkia sanojen vokaalirakennetta suodattamalla niistä konsonantit pois:... tr -dc aeiouyåäö Lisää tähän vielä perään... sort uniq -c katsoaksesi, mitkä ovat yleisiä vokaalirakenteita. Kokeile putkiesimerkeissä esitettyjä komentoja siten, että lisäät putkilinjaan elementin kerrallaan ja katselet tulosta joka välissä.