Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: tjka - 12.08.13 - klo:10.29
-
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-
-
Merkin korvaaminen toisella on päätteessä helppo asia, "tr" on tuohon pätevä:
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:
cat tiedostoni_jossa_tyhjaa.txt | tr -s ' \t' | tr ' \t' ',' >./tiedosto.csv
Korjataan jos toimii rumasti.
-
Kiitos. Tuo korvaa kaikki välit yhdellä pilkulla, mutta se ei erota onko kyseessä tabulointi vai välilyönti.
Tyhjää parempi kuitenkin...
-tjka-
-
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:
sed -e "s/[\t]/,/g"
tai:
tr '\t' ','
Muuta jokainen, mahdollisesti väleillä jommalta kummalta tai molemmilta puolilta ympäröity tabulaattori pilkuksi:
sed -e "s/[ ]*[\t][ ]*/,/g"
Muuta jäljelle jääneet peräkkäiset välit yhdeksi pilkuksi.
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:
sed -e "s/^[ ]\+//g"
Koko operaatio olisi siis esimerkiksi:
cat loki.txt | sed -e "s/^[ ]\+//g; s/[ ]*[\t][ ]*/,/g; s/[ ]\+/,/g" > loki.csv
-
Kiitokset. Tämä ( cat loki.txt | sed -e "s/^[ ]\+//g; s/[ ]*[\t][ ]*/,/g; s/[ ]\+/,/g" > loki.csv) näyttäisi toimivan... ;D
-tjka-