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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-02-21 23:05:59

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

zamiana kropki na przecinek

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

 

#2  2012-02-21 23:24:16

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: zamiana kropki na przecinek

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...


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#3  2012-02-21 23:39:55

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: zamiana kropki na przecinek

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

 

#4  2012-02-22 17:02:35

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: zamiana kropki na przecinek

Kod:

echo "a1 a.2 a.3 a.4 a5 a.6 a7 a.8 a9" | awk '{gsub("[.]", ",", $2); gsub("[.]", ",", $3); gsub("[.]", ",", $4); print $0}'

"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#5  2012-02-22 17:49:12

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: zamiana kropki na przecinek

Dzieki bercik właśnie o to chodziło.

Offline

 

#6  2012-02-22 19:00:54

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: zamiana kropki na przecinek

Gwoli ścisłości: awk również ma pętelki:

Kod:

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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)