Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: dotsi - 23.04.07 - klo:17.05
-
Terve,
Minulla on eräässä hakemistossa koko läjä tekstitiedostoja, joista jokaisesta haluaisin poistaa nollalla alkavat rivit. Ymmärsin, että komento
grep -v "^0"
tekee juuri tämän, mutta kuinka saan sen läpikäymään kaikki hakemiston tiedostot?
-
Grep ei poista tiedostoista mitään vaan ainoastaan näyttää (tai jättää näyttämättä ) ehdon täyttävät rivit. Jos haluat muokata tiedostoja niin sen voit tehdä sed:n avulla.
Poistetaan nollalla alkavat rivit tiedostossa "tiedostonimi"
$ sed -i '/^0/d' tiedostonimi
Poistetaan nollalla alkavat rivit kaikissa hakemiston tiedostoissa
$ sed -i '/^0/d' *
Poistetaan nollalla alkavat rivit kaikissa .txt-päätteisissä tiedostoissa
$ sed -i '/^0/d' *.txt
-
Kiitoksia erittäin paljon!
-
Jatkan tähän saman (uudelleennimetyn) aiheen alle, koska en pidä järkevänä aloittaa uutta keskustelua jokaisesta eteentulevasta ongelmastani, ne kun kuitenkin liippaavat toisiaan aika likeltä.
Minulla on tosiaan edelleen koko joukko noita tekstitiedostoja, joissa kussakin on lukuisia rivejä. Yksi rivi voi näyttää esimerkiksi tältä:
8 | 10 | 61.064625 | 28.090907
(kyseessä siis GPS-vastaanottimen paikanmäärityksessä käyttämät satelliitit, kaikki taivaalla sillä hetkellä näkyvät satelliitit, sekä niiden avulla laskettu sijainti)
Oleellinen luku tuossa tapauksessa on tuo 10, se on yhdessä tiedostossa joka rivillä sama. Haluaisinkin nyt käydä läpi kaikki (tai erikseen määriteltävät) tiedostot tulostaa kustakin tiedostosta vaikka viimeiseltä riviltä vain tuon 10:n (tai mikä se kussakin tiedostossa sattuu olemaan) tuolta "putkien" välistä erilliseen tiedostoon, josta ne olisi mahdollisesti helpompaa kopioda taulukkolaskentaan tms. Onnistuukohan?
Olen jälleen erittäin kiitollinen mahdollisesta avustanne.
-
8 | 10 | 61.064625 | 28.090907
Oleellinen luku tuossa tapauksessa on tuo 10, se on yhdessä tiedostossa joka rivillä sama.
Haluaisinkin nyt käydä läpi kaikki (tai erikseen määriteltävät) tiedostot tulostaa kustakin tiedostosta vaikka viimeiseltä riviltä vain tuon 10:n (tai mikä se kussakin tiedostossa sattuu olemaan) tuolta "putkien" välistä erilliseen tiedostoon, josta ne olisi mahdollisesti helpompaa kopioda taulukkolaskentaan tms. Onnistuukohan?
Ensimmäisen rivin tiedostosta saa komennolla
$ head -n1 tiedosto.txt
ja vastaavasti viimeisen komennolla
$ tail -n1 tiedosto.txt
Periaatteessa tässä tapauksessa on järkevämpää käyttää ensimmäistä vaihtoehtoa sillä silloin ei tarvitse lukea koko tiedostoa.
Taulukkolaskin todennäköisesti lukee varsin kiltisti "|"-merkeillä erotettua tietoa mutta jos haluat poimia tuon toisen sarakkeen niin se onnistuu komennolla
$ cut -d '|' -f 2
Tällä komennolla mukaan tulevat myös välilyönnit joten jos et halua niitä niin sitten kannattaa suodattaa ne pois jossain välissä esimerkiksi komennolla
$ tr -d ' '
Jos haluat pelkästään nuo toisen sarakkeen arvot esimerkiksi jokaisesta gps-päätteisestä tiedostosta uuteen tiedostoon niin se onnistuu loitsulla
$ head -n1 *.gps | cut -d '|' -f 2 | tr -d ' ' >gps-arvot.txt
-
Kiitoksia jälleen erittäin paljon ;D
-
Entäpä kuinka muutan tr:llä rivinvaihdot välilyönneiksi?
tr \n ' '
ei ainakaan näyttänyt toimivan.
edit: tr "\n" " "
toi ratkaisun :)
-
Tarvitsisin myös hieman apua.
Erään ohjelman tulosteessa on tämän näköisiä rivejä:
Drop.jpg 6400
jossa tuo "Drop.jpg" on tietysti tiedoston nimi ja perässäoleva luku tiedoston koko. Ja nyt mun pitäisi saada tuo tiedoston koko tuolta perästä pois. Ei siinä mitään, sen kekseinkin miten sen saa tehtyä:
cut -d ' ' -f 1 | tr -d ' '
mutta mitäs sitten, jos tiedostonimessä onkin välilyönti? Silloinhan tuo komento antaa nimen ensimmäisen osan välilyöntiin saakka?
Eli milläs komennolla saisi näyttämään koko tiedostonimen?
-
Erään ohjelman tulosteessa on tämän näköisiä rivejä:
Drop.jpg 6400
Eli milläs komennolla saisi näyttämään koko tiedostonimen?
Poistetaan rivin lopusta numerot ja muu ylimääräinen tauhka.
sed 's/[[:space:]]*[0-9]\+[[:space:]]*$//'
Tämän pitäisi olla melko varmatoiminen viritys joka ei nirsoile vaikka rivin lopussa olisi ylimääräisiä whitespace-merkkejä. Varmuuden vuoksi tiedostonimen ja luvun välistäkin syödään whitespace-merkit pois koska erottimena saattaa olla joko välilyöntejä tai tabulaattori.