Kirjoittaja Aihe: Miten vertaillaan tekstitiedoston rivejä keskenään?  (Luettu 2150 kertaa)

larpa

  • Vieras
Eli konsolissa: Miten vertailen txt-tiedoston rivejä keskenään, että onko siellä samoja rivejä jne.

SuperOscar

  • Käyttäjä
  • Viestejä: 4062
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Miten vertaillaan tekstitiedoston rivejä keskenään?
« Vastaus #1 : 18.12.07 - klo:12.09 »
Koodia: [Valitse]
man diff
Vastausta voisi hieman tarkentaa, jos tietäisi vähän enemmän siitä, mitä pitäisi vertailla ja miten...
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: Miten vertaillaan tekstitiedoston rivejä keskenään?
« Vastaus #2 : 18.12.07 - klo:12.19 »
Eli konsolissa: Miten vertailen txt-tiedoston rivejä keskenään, että onko siellä samoja rivejä jne.

Siis vertailet yhden txt-tiedoston rivejä keskenään vai kahden txt-tiedoston rivejä? Jos kyse on ensinmainitusta, suositellen man uniq ja man sort. Tekstitiedostojen käsittelyhän on unixien ominta aluetta... ystäviäsi ovat uniq, sort, grep, ptx ja muut vinkeät komennot putkilla toisiinsa yhdistettyinä.

Tämä on Wikipediasta:
Lainaus
uniq is a Unix utility which, when fed a text file, outputs the file with adjacent identical lines collapsed to one. It is a kind of filter program. Typically it is used after sort. It can also output only the duplicate lines (with the -d option), or add the number of occurrences of each line (with the -c option).

An example: To see the list of lines in a file, sorted by the number of times each occurs:

sort file | uniq -c | sort -n


Tässä käytännön kokeilua:

Koodia: [Valitse]
sirppi% cat teksti.txt
rivi yksi
rivi yksi
rivi kaksi
kaksi rivi
kolme rivä
sana siellä
toinen täällä
sana siellä
rivi kaksi

sirppi%
sirppi% sort teksti.txt |uniq -c |sort -n
   1
   1 kaksi rivi
   1 kolme rivä
   1 toinen täällä
   2 rivi kaksi
   2 rivi yksi
   2 sana siellä
sirppi%

Valinnalla -d näytetään vain kaksi kertaa esiintyvät rivit:

Koodia: [Valitse]
sirppi% sort teksti.txt | uniq -d
rivi kaksi
rivi yksi
sana siellä
sirppi%

Lisätietoja:

[1] Egrep for linguists (johdatus luonnollista kieltä olevien tekstien analyysiin unix-työkaluilla).
[2] Remove duplicate lines
[3] Unix uniq command
[4] Gnu coreutils manual (tärkeää luettavaa!)

« Viimeksi muokattu: 18.12.07 - klo:12.37 kirjoittanut MikkoJP »

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: Miten vertaillaan tekstitiedoston rivejä keskenään?
« Vastaus #3 : 18.12.07 - klo:14.17 »
Eli konsolissa: Miten vertailen txt-tiedoston rivejä keskenään, että onko siellä samoja rivejä jne.

Huomaan, että kysymyksesi loppuu lyhenteeseen jne.: ehkä haluat tietää myös toistuvatko tiedostossa samat sanat useita kertoja. Käytetään edellisessä viestissä olevaa tiedostoa teksti.txt:

Koodia: [Valitse]
sirppi% tr ' ' '\n' < teksti.txt | sort | uniq -c
   1
   3 kaksi
   1 kolme
   5 rivi
   1 rivä
   2 sana
   2 siellä
   1 toinen
   1 täällä
   2 yksi
sirppi%

Rivin alussa oleva numero ilmaisee, montako kertaa sana esiintyy tiedostossa. Sama voidaan tietysti järjestää esiintymien mukaisesti:

Koodia: [Valitse]
sirppi% tr ' ' '\n' < teksti.txt | sort | uniq -c | sort  -n
   1
   1 kolme
   1 rivä
   1 toinen
   1 täällä
   2 sana
   2 siellä
   2 yksi
   3 kaksi
   5 rivi
sirppi%

Tai useimmin esiintyvät sanat ensin:

Koodia: [Valitse]
sirppi% tr ' ' '\n' < teksti.txt | sort | uniq -c | sort -rn
   5 rivi
   3 kaksi
   2 yksi
   2 siellä
   2 sana
   1 täällä
   1 toinen
   1 rivä
   1 kolme
   1
sirppi%

Löytyiköhän näistä apua rivien vertailuun  ;D
« Viimeksi muokattu: 18.12.07 - klo:14.31 kirjoittanut MikkoJP »

larpa

  • Vieras
Vs: Miten vertaillaan tekstitiedoston rivejä keskenään?
« Vastaus #4 : 18.12.07 - klo:16.05 »
Aivan mahtavaa rivienvälistä luentaa  ;D
Oli hieman kiire tuossa kirjoitellessa, niin ei ehtinyt jaaritella enempiä.
Kiitoksia.