Kirjoittaja Aihe: Kuinka korvaan välilyönnit ja tyhjät merkit pilkuilla? [ratkaistu]  (Luettu 3978 kertaa)

tjka

  • Käyttäjä
  • Viestejä: 144
    • Profiili
Lokitiedosto (jossa on epämääräinen lukumäärä "tyhjää") pitäisi saada csv muotoon. Tiedostossa voi siis olla tyhjiä lyöntejä (yksi tai useampia peräkkäin) tai tabulaattorin tekemiä välejä. Tyhjät lyönnit, siis yksi tai useampi pitäisi korvata yhdellä pilkulla, jokainen tabulointi omalla pilkulla.

Googlasin aikani ja kokeilin SED, TR jne... komentoja esimerkkien mukaan mutta en saanut hommaa toimimaan...  >:(


-tjka-
« Viimeksi muokattu: 13.08.13 - klo:16.27 kirjoittanut tjka »

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Kuinka korvaan välilyönnit ja tyhjät merkit pilkuilla?
« Vastaus #1 : 12.08.13 - klo:16.04 »
Merkin korvaaminen toisella on päätteessä helppo asia, "tr" on tuohon pätevä:

Koodia: [Valitse]
cat tiedostoni_jossa_tyhjaa.txt  |  tr -s  ' '  ','  >./tiedosto.csv
Tuo korvaa välilyönnit "rutistaen kasaan" pilkulla eli jos monta välilyöntiä peräkkäin niin korvataan yhdellä pilkulla.

Tämä saattaisi tehdä likimain mitä haluat:

Koodia: [Valitse]
cat tiedostoni_jossa_tyhjaa.txt  | tr -s ' \t' | tr ' \t' ','  >./tiedosto.csv
Korjataan jos toimii rumasti.

« Viimeksi muokattu: 12.08.13 - klo:16.18 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

tjka

  • Käyttäjä
  • Viestejä: 144
    • Profiili
Vs: Kuinka korvaan välilyönnit ja tyhjät merkit pilkuilla?
« Vastaus #2 : 13.08.13 - klo:14.35 »
Kiitos. Tuo korvaa kaikki välit yhdellä pilkulla, mutta se ei erota onko kyseessä tabulointi vai välilyönti.
Tyhjää parempi kuitenkin...

-tjka-

nm

  • Käyttäjä
  • Viestejä: 16430
    • Profiili
Vs: Kuinka korvaan välilyönnit ja tyhjät merkit pilkuilla?
« Vastaus #3 : 13.08.13 - klo:16.15 »
Lokitiedosto (jossa on epämääräinen lukumäärä "tyhjää") pitäisi saada csv muotoon. Tiedostossa voi siis olla tyhjiä lyöntejä (yksi tai useampia peräkkäin) tai tabulaattorin tekemiä välejä. Tyhjät lyönnit, siis yksi tai useampi pitäisi korvata yhdellä pilkulla, jokainen tabulointi omalla pilkulla.

Oikeaa ratkaisua varten olisi hyvä nähdä esimerkki lokista, mutta ehkäpä tämä auttaisi:


Muuta jokainen tabulaattori pilkuksi:
Koodia: [Valitse]
sed -e "s/[\t]/,/g"tai:
Koodia: [Valitse]
tr '\t' ','
Muuta jokainen, mahdollisesti väleillä jommalta kummalta tai molemmilta puolilta ympäröity tabulaattori pilkuksi:
Koodia: [Valitse]
sed -e "s/[ ]*[\t][ ]*/,/g"
Muuta jäljelle jääneet peräkkäiset välit yhdeksi pilkuksi.
Koodia: [Valitse]
sed -e "s/[ ]\+/,/g"
Lisäksi saattaa olla tarvetta poistaa ihan aluksi rivin alusta välilyönnit luomatta saraketta, jos ensimmäinen kenttä on oikealle tasattu:
Koodia: [Valitse]
sed -e "s/^[ ]\+//g"

Koko operaatio olisi siis esimerkiksi:

Koodia: [Valitse]
cat loki.txt | sed -e "s/^[ ]\+//g; s/[ ]*[\t][ ]*/,/g; s/[ ]\+/,/g" > loki.csv
« Viimeksi muokattu: 13.08.13 - klo:16.19 kirjoittanut nm »

tjka

  • Käyttäjä
  • Viestejä: 144
    • Profiili
Vs: Kuinka korvaan välilyönnit ja tyhjät merkit pilkuilla?
« Vastaus #4 : 13.08.13 - klo:16.27 »
Kiitokset. Tämä ( cat loki.txt | sed -e "s/^[ ]\+//g; s/[ ]*[\t][ ]*/,/g; s/[ ]\+/,/g" > loki.csv) näyttäisi toimivan...  ;D


-tjka-