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

问题描述 投票:2回答:3

我有一个包含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,我尝试了但是没办法。有任何想法吗?如果我手动填写值,则收到的文件会发生这种情况,它可以按预期工作。

csv unix awk sed add
3个回答
3
投票

您能不能尝试以下操作。

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

0
投票

我将对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

0
投票

您怀疑,收到的文件在行尾可能具有不同的控制字符。

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

© www.soinside.com 2019 - 2024. All rights reserved.