Если вы используете * nix-систему , имеете доступ к sed
и может быть один или несколько нежелательных запятые только в определенном поле вашего CSV, вы можете использовать следующую однострочную строку для включения их в "
, как предлагает RFC4180, раздел 2 :
sed -r 's/([^,]*,[^,]*,[^,]*,)(.*)(,.*,.*)/\1"\2"\3/' inputfile
В зависимости от того, в каком поле могут находиться нежелательные запятые, вам придется изменить / расширить группы захвата регулярного выражения (и подстановки).
В приведенном выше примере четвертое поле (из шести) будет заключено в кавычки.
![enter image description here](https://i.stack.imgur.com/cOxbi.png)
В сочетании с опцией --in-place
вы можете применить эти изменения непосредственно к файлу.
Чтобы «построить» правильное регулярное выражение, нужно следовать простому принципу:
- Для каждого поля в вашем CSV, которое находится за до поля с нежелательной запятой (ями), вы пишете одну
[^,]*,
и складываете их все вместе в группу захвата.
- Для поля, содержащего нежелательную запятую (ы), вы пишете
(.*)
.
- Для каждого поля после поля с нежелательной запятой (-ями) вы пишете одну
,.*
и складываете их все вместе в группу захвата.
Вот краткий обзор различных возможных регулярных выражений / замен в зависимости от конкретной области. Если не дано, замена будет \1"\2"\3
.
([^,]*)(,.*) #first field, regex
"\1"\2 #first field, substitution
(.*,)([^,]*) #last field, regex
\1"\2" #last field, substitution
([^,]*,)(.*)(,.*,.*,.*) #second field (out of five fields)
([^,]*,[^,]*,)(.*)(,.*) #third field (out of four fields)
([^,]*,[^,]*,[^,]*,)(.*)(,.*,.*) #fourth field (out of six fields)
Если вы хотите удалить ненужные запятые с помощью sed
вместо того, чтобы заключать их в кавычки, обратитесь к этому ответу .