редактирование списков

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

редактирование списков

Непрочитанное сообщение bagas » 2011-03-17 21:50:42

Добрый вечер. Подскажите пожалуйста.
имееються ЗП списки.
Оператор их импартирует в таком виде.
xxxxxxxxxxxxx1000342 ,Иванов Алексей Петрович ,22116,65
так вот.нужно удалить все пробелы кроме ФИО и изменить если нужно запятую на точьку.
так вот пробелы у меня получилос удалить но все...как мне оставить пробелы в ФИО и заменить запятую на точьку?
вот что наработал.

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

#!/bin/bash
cd /mnt/share/ЗП
for f in *.txt;
do
sed -i -E -e 's/[ \\\/\[]//g' -e 's/]//g' $f;
enca -x CP1251 $f
done;
exit 0
Получаеться так

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

xxxxxxxxxxxxx1000342,ИвановАлексейПетрович,22116,65
помогите разобраться.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

x6e6564
проходил мимо

Re: редактирование списков

Непрочитанное сообщение x6e6564 » 2011-03-18 8:28:46

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

cat /tmp/test
xxxxxxxxxxxxx1000342 ,Иванов Алексей Петрович ,22116,65
xxxxxxxxxxxxx1000342 ,Иванов Алексей Петрович ,22116,65
sed 's/ ,/,/g; s/,/./g' /tmp/test
xxxxxxxxxxxxx1000342.Иванов Алексей Петрович.22116.65
xxxxxxxxxxxxx1000342.Иванов Алексей Петрович.22116.65

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: редактирование списков

Непрочитанное сообщение bagas » 2011-03-18 9:29:58

спасибо...
Я чуть не правильно объяснил что мне нужно сделать.Мне нужно изменить не везде запятую на точку а в сумме изменить запятую на точку.
xxxxxxxxxxxxx1000342,Иванов Алексей Петрович,22116.65 вот так должно получиться.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: редактирование списков

Непрочитанное сообщение bagas » 2011-03-18 9:42:12

И почему то у меня только меняются запятые на точки, пробелы не удаляются .
пробовал в bash и csh .
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

x6e6564
проходил мимо

Re: редактирование списков

Непрочитанное сообщение x6e6564 » 2011-03-18 12:03:53

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

sed 's/ ,/,/g; s/,\(..\)$/.\1/g;' /tmp/test
xxxxxxxxxxxxx1000342,Иванов Алексей Петрович,22116.65
xxxxxxxxxxxxx1000342,Иванов Алексей Петрович,22116.65

x6e6564
проходил мимо

Re: редактирование списков

Непрочитанное сообщение x6e6564 » 2011-03-18 12:12:29

более правильный вариант:

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

sed 's/\ \{1,\},/,/g; s/,\([0-9]\{2\}\)$/.\1/;' /tmp/test

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: редактирование списков

Непрочитанное сообщение bagas » 2011-03-19 11:59:24

попробывал, но все арвно не хочет.
$ sed 's/\ \{1,\},/,/g; s/,\([0-9]\{2\}\)$/.\1/;' техпроект.txt

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

xxxxxxxxxxxxx2000051,Иванов Геннадий Митрофанович,55402,65
xxxxxxxxxxxxx1000937,Иванов Игорь Викторович,39567,78
xxxxxxxxxxxxx1000938,Иванов Михаил Васильевич,32102,10
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: редактирование списков

Непрочитанное сообщение kpp » 2011-03-19 15:40:13

Возможно в концах строк есть еще символы - непечатные (если файл создавался в винде).
Попробуй

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

sed 's/\ \{1,\},/,/g; s/,\([0-9]\{2\}\).$/.\1/;' техпроект.txt
Или переписать скрипт sed в котором плясать не от концов строк, а от начал:

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

sed 's/\ \{1,\},/,/g; s/^\([^,]*,[^,]*,\)\([0-9]\{1,\}\),\([0-9]\{2\}\)/\1\2.\3/'
Последний раз редактировалось kpp 2011-03-19 15:43:50, всего редактировалось 1 раз.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

x6e6564
проходил мимо

Re: редактирование списков

Непрочитанное сообщение x6e6564 » 2011-03-19 15:40:59

1. Кодировка файла какая?
2. может в конце пробелы есть? тогда

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

sed 's/\ \{1,\},/,/g; s/\ \{1,\}$//; s/,\([0-9]\{2\}\)$/.\1/;'
s/\ \{1,\}$//; - убирирает любое кол-во пробелов в конце.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: редактирование списков

Непрочитанное сообщение kpp » 2011-03-19 15:47:12

В данном случае можно вообще не привязываться к началам\концам строк:

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

sed 's/\ \{1,\},/,/g; s/\([0-9]\{1,\}\),\([0-9]\{2\}\)/\1.\2/'
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.


Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: редактирование списков

Непрочитанное сообщение bagas » 2011-03-19 17:05:12

кодировка cp1251.
Спасибо большое:
x6e6564
kpp
Все получилось.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: редактирование списков

Непрочитанное сообщение bagas » 2011-03-19 17:40:48

сейчас посмотрел через ee и увидил, что стоит в конце строк символ возврата коректи ^M изо этого и не получалось.Еще раз спасибо!
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.