我有一个包含4列的CSV文件。例如
1132,John Doe,[email protected],3534534543
53213,John Doe,[email protected],51352363126
我想为每个值添加双引号,所以我在MAC上使用此脚本:
sed 's/[^,]*/"&"/g' file.csv > file2.csv
我收到
"1132","John Doe","[email protected]","3534534543
"
"53213","John Doe","[email protected]","51352363126
"
所以我得到了新行的最后一个引号,很可能我应该以某种方式删除/ r / n,我尝试了但是没办法。有任何想法吗?如果我手动填写值,则收到的文件会发生这种情况,它可以按预期工作。
您能不能尝试以下操作。
awk 'BEGIN{FS=",";RS="\r\n";s1="\"";OFS="\",\""} {$1=$1;$0=s1 $0 s1} 1' Input_file
如果您想留空行,请尝试以下操作。
awk 'BEGIN{FS=",";RS="\r\n";s1="\"";OFS="\",\""} NF{$1=$1;$0=s1 $0 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:]]*
。