2013-10-02 4 views
0

Я столкнулся с трудностями при удалении специальных символов из файла csv.Как удалить специальные символы из файла csv в unix

Мой процесс, как это в моей таблице вывода у меня есть некоторые данные, как этот

Col1 
BC,BS/APP 

Как это у меня есть еще 10 столбцов, где Существует вероятность получения специальных символов, когда я пытался с PATINDEX я способный удалить только первый специальный символ, и для удаления других символов мне нужно использовать цикл while, который занимает много времени, чтобы сделать это.

Так я попытался удалить специальные символы после bcping данные в файл CSV ниже является команда BCP я использую

bcp_with_error_check tempdb..STT_IM166_WEB_MWE out temp.dat -SSVR -UUSR -PPWD -c -b1000 -t'","' 
sed -e 's/,"0/,="0/g;s/,"1/,="1/g;s/,"2/,="2/g;s/,"3/,="3/g;s/,"4/,="4/g;s/,"5/,="5/g;s/,"6/,="6/g;s/,"7/,="7/g;s/,"8/,="8/g;s/,"9/,="9/g'temp.dat > temp1.dat 
sed -e 's/$/"/g' temp1.dat > temp2.dat 
sed -e 's/^/="/g' temp3.dat >>Filename.csv 

Моя проблема в том, так как он файл CSV, если я удалить запятую (,) рассматривая как особый символ, он нарушает макет файла.

Я могу заменить запятую в базе данных, но я не получаю команду, чтобы исключить запятую и удалить другие символы. Пожалуйста, помогите мне я нахожусь в самой необходимости этой команды

+0

Какую часть этой позиции следует удалить? – Beta

+0

Как вы знаете, когда первый столбец содержит запятую, когда первая запятая знаменует конец первого поля? Знаете ли вы, что второе поле всегда числовое? –

+0

Здесь я не включил этот код удаления запятых @Beta – Ramesh

ответ

1

Я не ясно, что вы на самом деле после того, как, но, по крайней мере, вы можете уменьшить свой первый sed команды с коэффициентом 10:

sed -e 's/,"\([0-9]\)/,="\1/g' temp.dat > temp1.dat 

Образец ищет запятую, двойную кавычку и цифру (и запоминает, что такое цифра); он заменяется запятой, равна, двойная кавычка и запоминаемая цифра.

Если у вас есть основания для различных временных файлов, вы можете свернуть три sed команды в один с:

sed -e 's/,"\([0-9]\)/,="\1/g' -e 's/$/"/g' -e 's/^/="/g' temp.dat >>Filename.csv 

И если bcp_with_error_check будет писать на стандартный вывод, если опустить out temp.dat аргументов, то вам не нужны временные файлы (что обычно является хорошей идеей). Обратите внимание, что если два человека невинно запускали эту команду одновременно в одном каталоге, они бы попирали временные файлы друг друга (или сталкивались с проблемами, потому что не могли). Без временных файлов у вас есть только окончательное имя файла, Filename.csv, о котором нужно беспокоиться.

Однако это не касается вашего основного вопроса - это просто улучшает ваши сценарии.

+0

Спасибо за ваши комментарии, и я это заметлю. Но моя главная проблема - удалить специальные символы, не нарушая компоновку csv. – Ramesh

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