在特定字符串之间查找并添加引号

G.k*_*yan 3 sed awk text-processing csv

当我使用 csv 时,不需要的逗号 (',') 会误导我的 csv 文件,结果导致不一致。

请在下面找到详细信息。

我的示例 csv 文件:

1|a,b|4
1|c,d|4
1|e,f|4
1|g,h|4
1|i,j|4
Run Code Online (Sandbox Code Playgroud)

我想要最终结果为:

1|"a,b"|4
1|"c,d"|4
1|"e,f"|4
1|"g,h"|4
1|"i,j"|4
Run Code Online (Sandbox Code Playgroud)

添加引号后,我将替换“|” 使用“,”,这样我的 csv 就会按我的预期工作。

我使用了下面的命令,但它没有像预期的那样给出。

sed -e 's/,/"&"/' file1.txt
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 14

使用csvformatfrom csvkit,并假设最终结果应该是一个以逗号为分隔符的 CSV 文件(如问题文本中所述):

$ csvformat -d '|' file
1,"a,b",4
1,"c,d",4
1,"e,f",4
1,"g,h",4
1,"i,j",4
Run Code Online (Sandbox Code Playgroud)

|会将CSV 文件的格式从-characters 作为分隔符重新格式化为将默认逗号作为分隔符。这样做时,它会正确引用需要引用的字段。

这也可以正确处理带有嵌入换行符的字段:

$ cat file
1|a,b|4
1|c,d|4
1|e,f|4
1|g,h|4
1|i,j|4
2|"line 1,
line2"|5
Run Code Online (Sandbox Code Playgroud)
$ csvformat -d '|' file
1,"a,b",4
1,"c,d",4
1,"e,f",4
1,"g,h",4
1,"i,j",4
2,"line 1,
line2",5
Run Code Online (Sandbox Code Playgroud)

如果您有某种结构化文档格式的文档,例如 CSV、JSON、XML、YAML、TOML 等,则没有理由使用该文档格式的解析器来解析该文档。