将双引号添加到 csv 文件问题中的每一列的脚本

Script that add double quotes to every column in csv file problem

我有一个包含 4 列的 CSV 文件。例如

1132,John Doe,johndoe@gmail.com,3534534543

53213,John Doe,johndoe@test.com,51352363126

我想为每个值添加双引号,所以我在 MAC 上使用了这个脚本:

sed 's/[^,]*/"&"/g' file.csv > file2.csv

我收到

"1132","John Doe","johndoe@gmail.com","3534534543
"

"53213","John Doe","johndoe@test.com","51352363126
"

所以我得到了新行的最后引号,很可能我应该以某种方式删除 /r/n,我试过了,但我做不到。有任何想法吗?如果我手动填充值,它会按预期工作,我收到的文件会发生这种情况。

能否请您尝试以下。

awk 'BEGIN{FS=",";RS="\r\n";s1="\"";OFS="\",\""} {=;[=10=]=s1 [=10=] s1} 1' Input_file

如果您想留下空行,请尝试以下操作。

awk 'BEGIN{FS=",";RS="\r\n";s1="\"";OFS="\",\""} NF{=;[=11=]=s1 [=11=] s1} 1' Input_file

我会对 CSV 数据使用适当的 CSV 解析器。 Ruby ships with one,所以可以写成

ruby -rcsv -e '
    csv_in  = CSV.new(STDIN)
    csv_out = CSV.new(STDOUT, force_quotes: true)
    csv_in.each {|row| csv_out << row}
' < file.csv

如您所料,您收到的文件可能在行尾有不同的控制字符。

一个简单的解决方法是从匹配中排除控制字符和逗号。也就是说,您可以搜索 [^,[:cntrl:]]*.

而不是搜索 [^,]*