Страница 1 из 1

Обработать отдельно две части строки

Добавлено: 2009-05-13 9:51:54
terminus
Попытался тут сходу придумать что-нибудь, но незаладилось... Помогите советом.

Есть файл с информацией вида:

Код: Выделить всё

param.one.root=10
param.two.root=11.33
next.param.two.root=21.332
...
Надо привести к виду:

Код: Выделить всё

param_one_root : 10
param_two_root : 11.33
next_param_two_root : 21.332
...
то есть = это разделитель. В первой части заменить . на _ а во второй не менять. Сам разделитель заменить на :

Хотел сделать это через sed s/\./_/g а потом через awk, но не знаю как остановить выполнение sed на = чтобы он в значениях точки не убил...

Re: Обработать отдельно две части строки

Добавлено: 2009-05-13 10:21:24
skeletor
У меня получилось вот так

Код: Выделить всё

[skeletor@srv-test /usr/home/skeletor]$ cat 1.txt
param.one.root=10
param.two.root=11.33
next.param.two.root=21.332
[skeletor@srv-test /usr/home/skeletor]$ cat 1.txt  | sed 's/=/ : /g' > 2.txt
[skeletor@srv-test /usr/home/skeletor]$ cat 2.txt
param.one.root : 10
param.two.root : 11.33
next.param.two.root : 21.332

Re: Обработать отдельно две части строки

Добавлено: 2009-05-13 10:36:25
terminus
Эх, если бы так просто... В первой часте надо . заменить на _ при этом во второй не менять. Поменять разделитель с = на : не проблема через awk -F "=" '{print $1 " : " $2}'

У меня кризис идей именно как сделать замену точек на черточки ДО разделителя (как остановить sed или как сделать это через другую утилиту). Тут важна скорость работы решения. Самое крайнее на что можно пойти это писать отдельный, сложный shell скрипт в котором уже пытаться что-то делать, но мне бы хотелось максимально проще (в идеале одной командой).

Re: Обработать отдельно две части строки

Добавлено: 2009-05-13 10:54:51
abanamat

Код: Выделить всё

awk -F '=' '{gsub(/\./,"_",$1);print($1":"$2)}'

Re: Обработать отдельно две части строки

Добавлено: 2009-05-13 11:20:57
terminus
Блин! Все гениальное просто :Yahoo!: Спасибо :smile:

Re: Обработать отдельно две части строки

Добавлено: 2009-05-13 11:48:55
skeletor
Точно :) Завтыкал.