Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Mam pewne dane w pliku gdzie w 2,3,4 kolumnie mam przy liczbach kropka zamiast przecinka. W 6, 8, 11 też kropka się znajduje ale tam musi być.
Pytanie jak to złapać (sed | awk) aby zamienić tylko w tych trzech kolumnach kropki na przecinki.
Offline
Można zobaczyć fragment danych? ;)
Czym są oddzielone kolumny? Tak na pierwszy rzut to bym zaimportował dane jako csv do... Może excel'a na początek? Jeśli nie to do R'a. Ten drugi ze wszystkim sobie poradzi... (sed | awk) pewnie da rade, ale myślę, że będzie trudno...
Offline
Excelem to ja wiem że sie da ale tych plików bedzie wiecej więc nie mam ochoty każdy importować.
Co oddzielenia kolumn to nie ma znaczenia bo ja sobie ten plik oddzielam czym chce. Przykładowo mam plik z bazą produktów oczywiście wyeksportowaną do pliku teksowego.
Plik ten jest co stronę pięknie okraszony nagłówkami które powtarzają się co stronę. Mało każy wiersz nie mieści się w jednej lini więc tzreba drugą linie przenieść na koniec poprzedniej
Plik jest kodowany w 852 dos.
Zrobiłem już:
iconv -f 852 < baza > baza-test
ruby -pe '$_ = $_.chomp + " " + gets if $. % 2' < baza-test > nowy-alpha // dokleja drugą linię na koniec pierwszej
grep "^[0-9]" nowy-alpha > nowy-alpha1.csv //wkleja tylko te wiersze które zaczynają się od liczb // pierwsza kolumna to kod kreskowy
sed nowy-alpha1.csv -Ee 's@[[:space:]]+@ @g'> nowy-alpha2.csv //zamienia wszystkie spacje tabulatory na jedną spację
Pozostało mi tylko pozamieniać te trzy kolumny kropki na przecinki
Ostatnio edytowany przez hello_world (2012-02-21 23:41:07)
Offline
echo "a1 a.2 a.3 a.4 a5 a.6 a7 a.8 a9" | awk '{gsub("[.]", ",", $2); gsub("[.]", ",", $3); gsub("[.]", ",", $4); print $0}'
Offline
Dzieki bercik właśnie o to chodziło.
Offline
Gwoli ścisłości: awk również ma pętelki:
echo "a1 a.2 a.3 a.4 a5 a.6 a7 a.8 a9" | awk '{for (i=2;i<=4;i++) gsub("\\.", ",", $i); print $0}'
Offline