2013-09-04 5 views
1

У меня есть файл .CSV, который содержит несколько записей с номерами в них, которые заключены в двойные кавычки (например, в «455,365.44») и запятые между кавычки. Мне нужно удалить запятую из числовых значений («455,365,44» должно выглядеть как 455365,44 после обработки) записей, чтобы я мог использовать их в дальнейшей обработке файла.Удалить двойные кавычки и запятую из числового значения файла .CSV

Вот пример файла

column 1, column 2, column 3, column 4, column 5, column 6, column 7 
12,"455,365.44","string with quotes, and with a comma in between","4,432",6787,890,88 
432,"222,267.87","another, string with quotes, and with two comma in between","1,890",88,12,455 
11,"4,324,653.22","simple string",77,777,333,22 

и мне нужно результат выглядит следующим образом:

column 1, column 2, column 3, column 4, column 5, column 6, column 7 
12,455365.44,"string with quotes, and with a comma in between",4432,6787,890,88 
432,222267.87,"another, string with quotes, and with two comma in between",1890,88,12,455 
11,4324653.22,"simple string",77,777,333,22 

PS: Мне нужно только значение, которые числовые быть преобразовано так и Строковые значения должны оставаться одинаковыми.

Пожалуйста, помогите ...

+0

Какой язык вы используете, чтобы сделать это (и не говорите, 'regex')? Вы знаете, какие столбцы будут отображаться в ваших числовых полях? –

+0

@MikeW У меня есть два случая, где в первом случае я знаю, какое поле числовые значения будут заключены в двойные кавычки для значений. Второй случай, я не знаю, где находятся числовые значения. Как мне это достичь? Я пытаюсь использовать это в сценарии оболочки Unix. Любые предложения ??? – Dhruuv

+0

@Dhruuv Вы можете использовать регулярное выражение perl. Пожалуйста, ознакомьтесь с последним обновлением моего ответа. – morja

ответ

4

Чтобы удалить кавычки (заменить номер с кавычками с числом без них):

s/"(\d[\d.,]*)"/\1/g 

Посмотреть на rubular

Для запятых я мог только подумайте о lookahead и lookbehind, если это поддерживается вашей реализацией регулярного выражения (замените запятые на ничего, если до и после есть число в котировках):

s/(?<="[\d,]+),(?=[\d,.]+")//g 

Вам необходимо выполнить это перед удалением кавычек.

Он также может работать без просмотра назад:

s/,(?=[\d,.]*\d")//g 

Посмотреть на rubular

В сценарии оболочки вы можете использовать Perl например выполнить:

cat test.csv | perl -p -e 's/,(?=[\d,.]*\d")//g and s/"(\d[\d,.]*)"/\1/g' 

Объяснение регулярное выражение:

первого выполнения:

s/,(?=[\d,.]*\d")//g 

Это удалит все запятые, которые следует номер ([\d,.]*\d) и цитаты, таким образом удаляя только запятые из числа в котировках

следующий выполнить

s/"(\d[\d,.]*)"/\1/g 

Это заменит все номера, которые находятся в кавычках по значению без кавычек

+0

Привет, Морья, не могли бы вы объяснить свой код тем, который использовал perl? Очень ценю это ... – Dhruuv

+0

Привет, я обновил свой ответ. Надеюсь, поможет. – morja

+0

Большое спасибо за объяснение ответа ... Очень полезно ... – Dhruuv

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