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
使用csvformat
from 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 等,则没有理由不使用该文档格式的解析器来解析该文档。