Kirjoittaja Aihe: Siirtokokeilua: grep  (Luettu 1945 kertaa)

Araminta

  • Käyttäjä
  • Viestejä: 97
    • Profiili
Siirtokokeilua: grep
« : 01.04.19 - klo:14.34 »
Tarkoituksena on kokeilla, saanko vuosien varrella virittelemäni datanpyörittely-ympäristön toimimaan Ubuntussa. Alkuperäinen platform OS/2, nykyisin EComStation (OS/2 4.50), joka sekään ei ole enää tuettu. Palikoina X2-editori (profiloitava, makrotettava, ...), FMOS2 (tiedostojenhallinta), REXX (skriptit, makrot) ja muutamia Unixin shell-funktioitten (GREP, AWK, ...) porttauksia OS/:een. Käyttötarve sujuva tutkimusdatan pyörittely ja analysointi, vaatimuksena se, että kaikki data tallennetaan ja toimii perustekstimuodossa ja on luettavissa kaikilla alustoila DOSistä Mac'iin. Kysymyksiä syntyy varmaan lisää, jos kokeilu näyttää lupaavalta. Kovin paljon aikaa ei testaukseen kuitenkaan ole käytettävissäni. Ensimmäinen ongelma:

Grep
Tätä kokeilin ensin, kun ajattelin, että se toimisi siltään. Näyttäis toimivan normaalisti, mutta palautti vain osan tuloksista ja tuloksia, jotka eivät sisältyneet hakumalliin. Tulosrivien väleihin tulostuu rivejä:

  Binääritiedosto filename täsmää hakuun

Useat näistä tiedostoista sisältävät haettuja rivejä, jotka eivät näy tulosteessa. Binääritiedosto? Isot ja pienet kirjaimet olen huomioinut hakulausekkeessa. Hakujonon ABCD.1234 sisältävien rivien lisäksi tulostukseen tuli myös pelkän alkuosan ABCD sisältäviä rivejä. Eihän sen näin pitäisi toimia. Ja vaikka tulostus menisi oikein, on tämä erittäin hidas tapa työskennellä. Onko olemassa jotain kätevämpää hakumekanistia, joka tuottaisi määritetyt merkkijonot outputiin?  Tykkään kyllä Grepin pattern-hausta, enkä haluaisi sitä menettää. Kaikki data on ulkoisilla lecyasemilla, jos sillä on väliä.

Kiitos ajatuksistanne!     

   

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Siirtokokeilua: grep
« Vastaus #1 : 01.04.19 - klo:14.47 »
ja muutamia Unixin shell-funktioitten (GREP, AWK, ...) porttauksia OS/:een.

Eiväthän grep ja awk ole funktioita vaan ihan ohjelmatiedostoja?

Lainaus
Grep
Tätä kokeilin ensin, kun ajattelin, että se toimisi siltään. Näyttäis toimivan normaalisti, mutta palautti vain osan tuloksista ja tuloksia, jotka eivät sisältyneet hakumalliin. Tulosrivien väleihin tulostuu rivejä:

  Binääritiedosto filename täsmää hakuun

Useat näistä tiedostoista sisältävät haettuja rivejä, jotka eivät näy tulosteessa. Binääritiedosto?

Tässä kuulostaisi olevan kaksi erillistä ongelmaa. Toinen koskee hakujonoa, toinen tiedostoparametreja. Koska jälkimmäisistä vastaa Un*xissa yleensä komentotulkki, siinä on kyse luultavasti vain siitä, että tiedostojokerisi löytää myös joitakin binaaritiedostoja. Edellinen taas on ohjelman itsensä ongelma. Ensimmäinen arvaukseni liittyi eri merkistökoodauksiin (CP-850 vs. UTF-8), mutta jos hakujono on ”ABCD.1234”, ei kyse varmaan ole siitäkään vaan virheellisestä ohjelmakoodista.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

nm

  • Käyttäjä
  • Viestejä: 16242
    • Profiili
Vs: Siirtokokeilua: grep
« Vastaus #2 : 01.04.19 - klo:16.12 »
Mahdollisten merkistöongelmien lisäksi DOS, Windows ja OS/2 -maailmassa tekstitiedostoissa käytetään CR+LF-rivinvaihtoja, jotka aiheuttavat helposti ongelmia Unixissa, jossa rivinvaihto on pelkkä LF-merkki. Datan esiprosessoinnissa kannattanee muuntaa merkistö UTF-8:ksi ja poistaa CR:t rivinvaihdoista esim. dos2unix-ohjelmalla tai tr:llä.

Jos mahdollista, laita liitteeksi esimerkkitiedosto, jossa grep-komentosi toimii väärin.

Araminta

  • Käyttäjä
  • Viestejä: 97
    • Profiili
Vs: Siirtokokeilua: grep
« Vastaus #3 : 02.04.19 - klo:10.29 »
Kiitos pikaisista vastauksista! Ensi ajatus oli tietenkin klikata tiedosto heksaksi, että näen, poikkeavatko nuo tiedostot, jotka on listattu binääreiksi, jotenkin niistä, joita se ainakin yrittää käsitellä, mutta en keksinyt, miten se tapahtuu (X2  editorilla yksi klikkaus Ctrl-H). Kiitos tarjouksesta katsoa tiedostoa, saatan vielä tarttua siihen, mutta yritän ensin haravoida, onko grepin toiminnassa jotain logiikkaa.

Tätä olen kysynyt ennenkin; onko Ubuntussa jotain toimivaa editoria merkkitiedostoille. Tämä olisi ihan kriittinen juttu ja helpottaisi kokeilua.   

nm

  • Käyttäjä
  • Viestejä: 16242
    • Profiili
Vs: Siirtokokeilua: grep
« Vastaus #4 : 02.04.19 - klo:10.47 »
Kiitos pikaisista vastauksista! Ensi ajatus oli tietenkin klikata tiedosto heksaksi, että näen, poikkeavatko nuo tiedostot, jotka on listattu binääreiksi, jotenkin niistä, joita se ainakin yrittää käsitellä, mutta en keksinyt, miten se tapahtuu (X2  editorilla yksi klikkaus Ctrl-H). Kiitos tarjouksesta katsoa tiedostoa, saatan vielä tarttua siihen, mutta yritän ensin haravoida, onko grepin toiminnassa jotain logiikkaa.

Linuxissa perustyökalu tiedoston sisällön tarkasteluun heksamuodossa on hexdump:

Koodia: [Valitse]
hexdump -C tiedosto.txt
xxd on toinen yleinen työkalu, jolla voi muuntaa edestakaisin alkuperäisen binäärin ja heksaesityksen välillä, jolloin heksamuotoista tiedostoa voi editoida millä tahansa tekstieditorilla ja muuntaa sitten takaisin binääriksi.

Graafisista heksaeditoreista Bless on varsin pätevä, mutta muitakin on kyllä olemassa.

Koodia: [Valitse]
sudo apt install bless

Tätä olen kysynyt ennenkin; onko Ubuntussa jotain toimivaa editoria merkkitiedostoille. Tämä olisi ihan kriittinen juttu ja helpottaisi kokeilua.

Tarkoitatko siis tekstieditoria? Niissähän ei valinnanvaraa puutu. Tekstipäätteessä suosittuja ovat mm. Nano, Emacs, Vim ja Joe. Emacsista ja Vimistä on myös graafiset versiot, mutta peruskäyttöön riittää yksinkertaisempi gedit. Modernimpia ohjelmoijien suosimia vaihtoehtoja ovat Sublime Text, Atom ja Visual Studio Code.

Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Vs: Siirtokokeilua: grep
« Vastaus #5 : 05.04.19 - klo:18.51 »
Grep on paljon käytetty työkalu ja epäilen että siinä on virheitä. Esim grep “\bABCD.1234.\{12\}\b”  löytää "ABCD.1234" merkkijonon ja sitä saa seurata 12 mitä tahansa merkkiä. grep ohjelmasta löytyy myös muunnoksia kuten ‘egrep’ ja ‘fgrep’. Locate ei toimi ulkoisilla levyillä automaattisesti. On nopea työkalu tiedoston etsintään. Hakutyökaluja ja editoreita luulisi olevan tarpeeksi. KDE:n työpöytä osaa indeksoida tiedostoja ja nopeuttaa hakuja.  file komento näyttää tiedoston tyypin.