Страница 1 из 1
редактирование списков
Добавлено: 2011-03-17 21:50:42
bagas
Добрый вечер. Подскажите пожалуйста.
имееються ЗП списки.
Оператор их импартирует в таком виде.
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
помогите разобраться.
Re: редактирование списков
Добавлено: 2011-03-18 8:28:46
x6e6564
Код: Выделить всё
cat /tmp/test
xxxxxxxxxxxxx1000342 ,Иванов Алексей Петрович ,22116,65
xxxxxxxxxxxxx1000342 ,Иванов Алексей Петрович ,22116,65
sed 's/ ,/,/g; s/,/./g' /tmp/test
xxxxxxxxxxxxx1000342.Иванов Алексей Петрович.22116.65
xxxxxxxxxxxxx1000342.Иванов Алексей Петрович.22116.65
Re: редактирование списков
Добавлено: 2011-03-18 9:29:58
bagas
спасибо...
Я чуть не правильно объяснил что мне нужно сделать.Мне нужно изменить не везде запятую на точку а в сумме изменить запятую на точку.
xxxxxxxxxxxxx1000342,Иванов Алексей Петрович,22116.65 вот так должно получиться.
Re: редактирование списков
Добавлено: 2011-03-18 9:42:12
bagas
И почему то у меня только меняются запятые на точки, пробелы не удаляются .
пробовал в bash и csh .
Re: редактирование списков
Добавлено: 2011-03-18 12:03:53
x6e6564
Код: Выделить всё
sed 's/ ,/,/g; s/,\(..\)$/.\1/g;' /tmp/test
xxxxxxxxxxxxx1000342,Иванов Алексей Петрович,22116.65
xxxxxxxxxxxxx1000342,Иванов Алексей Петрович,22116.65
Re: редактирование списков
Добавлено: 2011-03-18 12:12:29
x6e6564
более правильный вариант:
Код: Выделить всё
sed 's/\ \{1,\},/,/g; s/,\([0-9]\{2\}\)$/.\1/;' /tmp/test
Re: редактирование списков
Добавлено: 2011-03-19 11:59:24
bagas
попробывал, но все арвно не хочет.
$ sed 's/\ \{1,\},/,/g; s/,\([0-9]\{2\}\)$/.\1/;' техпроект.txt
Код: Выделить всё
xxxxxxxxxxxxx2000051,Иванов Геннадий Митрофанович,55402,65
xxxxxxxxxxxxx1000937,Иванов Игорь Викторович,39567,78
xxxxxxxxxxxxx1000938,Иванов Михаил Васильевич,32102,10
Re: редактирование списков
Добавлено: 2011-03-19 15:40:13
kpp
Возможно в концах строк есть еще символы - непечатные (если файл создавался в винде).
Попробуй
Код: Выделить всё
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/'
Re: редактирование списков
Добавлено: 2011-03-19 15:40:59
x6e6564
1. Кодировка файла какая?
2. может в конце пробелы есть? тогда
Код: Выделить всё
sed 's/\ \{1,\},/,/g; s/\ \{1,\}$//; s/,\([0-9]\{2\}\)$/.\1/;'
s/\ \{1,\}$//; - убирирает любое кол-во пробелов в конце.
Re: редактирование списков
Добавлено: 2011-03-19 15:47:12
kpp
В данном случае можно вообще не привязываться к началам\концам строк:
Код: Выделить всё
sed 's/\ \{1,\},/,/g; s/\([0-9]\{1,\}\),\([0-9]\{2\}\)/\1.\2/'
Re: редактирование списков
Добавлено: 2011-03-19 15:53:53
x6e6564
kpp, угу

Re: редактирование списков
Добавлено: 2011-03-19 17:05:12
bagas
кодировка cp1251.
Спасибо большое:
x6e6564
kpp
Все получилось.
Re: редактирование списков
Добавлено: 2011-03-19 17:40:48
bagas
сейчас посмотрел через ee и увидил, что стоит в конце строк символ возврата коректи ^M изо этого и не получалось.Еще раз спасибо!