2016-06-15 4 views
0

У меня есть файл, который должен быть отформатирован, как это:Удалить специальные символы из File- Unix

ID  QTY 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 

Иногда приходит отформатированный как это, хотя со специальными символами, отделяющих первые 9 цифр.

xxx,xx,xx,xx,xxx 
xxx/xx/xx/xx,xxx 
xx.xxx.xxxx,xxx 

Я хотел бы знать, как удалить любые специальные символы из всего ID.

+0

Я 'СЭД -e 's/[;()' \ ']// г; s/*// g '$ newDir/$ processNew> tmp && mv -f tmp $ newDir/$ processNew', но это выводит «,» между идентификатором и QTY, и мне нужно сохранить его. –

+0

Включает ли последний столбец три символа? –

+0

Не обязательно. Есть сценарий, который загружается после моего скрипта, и я считаю, что он читает слева от запятой и справа от запятой. –

ответ

0

Может пригодиться. Если обе длины поля фиксированы, то есть 9 и 3 символа, используйте это.

sed 's/[\/.\,]//g' test2|awk '{print substr ($0, 1,9)","substr ($0, 10,13)}' 

Если используется только первая длина поля, то есть 9 символов, то используйте эту команду.

sed 's/[\/.\,]//g' test2|sed -r -e 's/^.{9}/&,/' 
+0

В редких случаях идентификатор начинается с меньшего числа и не будет заполнять все 9 цифр. У меня это под контролем, но совместная работа кода - это боль. Есть ли способ использовать последнюю запятую как среднюю точку и удалить любые специальные символы слева от этой запятой? –

0

Вот сценарий sed. Она удаляет каждый специальный символ, а затем вновь вставляет , после девятого на строки, содержащие специальные символы:

sed -r '/[./,]/ {s/[,/.]//g; s/(.{9})(.*)/\1,\2/g}' 
+0

Есть ли все-таки оставить эту запятую, не добавляя ее обратно? Иногда первые 9 цифр нуждаются в нулевом значении, и это может испортить этот тест. –

Смежные вопросы