我有以下csv:
column1, column2, column3
1, 03-12-2017, some text, with commas
我正在寻找简单的方法(linux工具)将配额添加到最后一栏:
column1, column2, column3
1, 03-12-2017, "some text, with commas"
你有什么想法吗?
答案 0 :(得分:1)
您可以使用sed
:
sed '1!{s/\([^,]*,[^,]*, \)/\1"/;s/$/"/}'
1!
表示不应将该块应用于第一行[^,]*
表示尽可能多的非逗号字符\1
中被记住,并由自己替换后跟"
$
的末尾替换为"
答案 1 :(得分:1)
awk
是操作分隔文件的绝佳工具:
awk -F",[ ]*" '
NR==1 { print; next }
{ for(i=1; i<NF-1; i++) { printf("%s, ", $i) } printf("\"");
printf("%s, ", $(NF-1));
printf("%s\"\n", $NF) }' file
-F",[ ]*"
- 使用“逗号后跟零个或多个空格作为字段分隔符;如果您确定所有分隔符在逗号后有一个空格-F", "
答案 2 :(得分:1)
如果可以超过3个字段,
你可以试试这个awk
awk -F, '
NR!=1{
$NF=$NF"\""
a=b=$(NF-1)
sub(/[^[:blank:]].*/,"",a)
sub(/^[[:blank:]]*/,"",b)
$(NF-1)=a "\"" b
}1' OFS=, infile
或者这个sed
sed -E '
1b
s/([[:blank:]])([^,]*,[^,]*$)/\1"\2"/
' infile
答案 3 :(得分:1)
awk 'BEGIN{FS=OFS=", "}NR>1{$3="\""$3;$4=$4"\""}1' file
输出将双引号添加到第二行最后2个字段
column1, column2, column3
1, 03-12-2017, "some text, with commas"