Pieni Unix-opas: esimerkkejä

Esimerkkitekstit

CSC: kielipankki/parole-fi/latest/a-lic/sanomalehdet-a/y-hs170890.sgml
http://wordnet.princeton.edu/3.0/LICENSE

Sisältö

I Tekstitiedoston muuttaminen virke/rivi -muotoon

II Tekstitiedoston muuttaminen sana/rivi -muotoon

III Frekvenssilista juoksevasta tekstistä

IV Ylimääräisten merkkien poistaminen tiedostosta

Komentojen tulosteen (output) voi ohjata joko tiedostoon (> tiedosto.txt) tai tulostaa ruudulle komennolla 'more'.

I

Tekstitiedoston muuttaminen virke/rivi -muotoon
, jos alkuperäinen teksti on esim. kappale/rivi -muodossa:
(1)
cat tied1.txt | sed 's/[\.|?]/\.+/g' | more
(katso esim)
sed: Korvaa hakasuluissa mainitut välimerkit (.?) merkkijonolla (.+) Putkimerkki ( | ) tarkoittaa tässä 'tai'.
Koodinvaihtomerkki \ tarkoittaa, että sitä seuraava merkki tulkitaan kirjaimellisesti.

(2)
cat tied1.txt | sed 's/[\.|?]/\.+/g' | tr "+" "\012" | more (katso esim)
sed: kuten yllä.
tr: Korvaa + -merkin rivinvaihdolla. Rivinvaihto merkitään ASCII-koodilla 012.

II
Tekstitiedoston muuttaminen sana/rivi -muotoon
:
(1)
cat tied1.txt | tr "\.|\,|\:|?|\040" "\012" | more (katso esim)
tr: korvaa pisteen, pilkun, kaksoispisteen, kysymysmerkin tai välilyönnin (040) rivinvaihdolla (012). 'Tai' merkitään putkella |.

(2)
cat tied1.txt | tr "\.|\,|\:|?|\040" "\012" | tr -s "\040 " "\012" | more (katso esim)
tr1: Kuten yllä.
tr2: Poistaa tyhjät rivit korvaamalla välilyönnit rivinvaihdolla.

III
Frekvenssilistan muodostaminen juoksevasta tekstistä
:
(1)
cat tied1.txt | tr "\.|\,|\:|?|\040" "\012" | tr -s "\040 " "\012" | sort -f | more (katso esim)
Alku kuten esimerkissä II(2).
sort: lajittelee aineiston aakkosjärjestykseen.
-f sort-komennon yhteydessä tarkoittaa, että isot ja pienet kirjaimet ovat samanarvoisia.

(2)
cat tied1.txt | tr "\.|\,|\:|?|\040" "\012" | tr -s "\040 " "\012" | sort -f | uniq -ci | more
Alku kuten esimerkissä III(1).
uniq: poistaa duplikaatit lajitellusta aineistosta ja tulostaa ainoastaan yhden rivin samanlaisten rivien joukosta (katso esim).
-c uniq-komennon yhteydessä laskee ja tulosta samanlaisten rivien summan (katso esim).
-i uniq-komennon yhteydessä tarkoittaa, että isot ja pienet kirjaimet ovat samanarvoisia (katso esim).

(3)
cat tied1.txt | tr "\.|\,|\:|?|\040" "\012" | tr -s "\040 " "\012" | sort -f | uniq -ci | sort -nr | more
Alku kuten esimerkissä III(2).
sort -nr: -n lajittelee numerokentän mukaan, -r tulostaa numerot laskevassa järjestyksessä. (katso esim).

IV

Ylimääräisten merkkien poistaminen tiedostosta.
Esimerkkitekstissä tekstin rakenne on koodattu tiedostoon SGML-elementeillä (tageilla), joita tässä tapauksessa ovat
tekstikappaleen alkua ja loppua ilmaisevat, kulmasulkeissa olevat p ja /p, sekä ajatusviivaa että lainausmerkkiä ilmaisevat,
&-merkillä alkavat 'mdash' ja 'rdquo'
(katso esim.)

(1)
Muutetaan tiedosto ensin esim. virke/rivi-muotoon kuten kohdassa I(2):
cat tied1.txt | sed 's/[\.|?]/\.+/g' | tr "+" "\012" | more (katso esim)

(2)
Poimitaan komennolla 'grep' kaikki ne rivit, joilla esiintyy jompikumpi merkeistä < tai &.
cat tied1.txt | sed 's/[\.|?]/\.+/g' | tr "+" "\012" | grep '[<|&]' | more (katso esim).

Merkintä [<|&] on ns. säännöllinen lauseke. Hakuehdot kirjoitetaan hakasulkujen sisään.
Symbolin | merkitys on 'tai'. Tässä siis haetaan rivejä, joilla esiintyy joko merkki < tai merkki &.

(3)
Valitsin -v grep-komennon yhteydessä tulostaa kaikki ne rivit, joilla EI ole merkkejä < tai &.
cat tied1.txt | sed 's/[\.|?]/\.+/g' | tr "+" "\012" | grep -v '[<|&]' | more (katso esim).

(4) Tiedosto voi olla myös sana/rivi -muodossa (nimetään ko. tiedosto tässä vaikka tiedostoksi tied2.txt), ks. kohta II(2).
Poimitaan tiedostosta tied2.txt kaikki ne rivit, joilla esiintyy jompikumpi merkeistä < tai &.
cat tied2.txt | grep '[<|&]' | more (katso esim).

Jos nyt käytetään grep-komennossa valitsinta -v, saadaan kaikki ne rivit, joilla ei esiinny merkkejä < tai &.
cat tied2.txt | grep -v '[<|&]' | more (katso esim).


anu.airola@helsinki.fi
Last modified: Wed Mar 28 16:25:25 EEST 2007