将双引号添加到 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:]]*
.
而不是搜索 [^,]*
我有一个包含 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:]]*
.
[^,]*