逗号分隔值为单个反向引号和逗号分隔值

时间:2016-11-30 05:46:42

标签: linux bash shell

我有数据

    abc,defg,hijklm,op,qrs,tuv

我希望将此数据转换为

    'abc','defg','hijklm','op','qrs','tuv'

我想在linux中做。我用了#34; sed"。我一直在寻找互联网,但没有遇到解决方案。请帮帮我。

4 个答案:

答案 0 :(得分:1)

在开始时添加单引号(^)&结束($),并使用带有3个表达式的sed(使用-e选项指定它们),用引号逗号引用(就像你做的那样)替换逗号:

echo  abc,defg,hijklm,op,qrs,tuv | sed -e "s/^/'/" -e "s/\$/'/" -e "s/,/',\'/g" 

(另外:用双引号保护单引号)

结果:

'abc','defg','hijklm','op','qrs','tuv'
awk中的

(可能有点笨拙),通常更好,因为字段解析由awk原生处理:

echo  abc,defg,hijklm,op,qrs,tuv | awk -F, "{for (i=1;i<=NF-1;i++) printf(\"'%s',\",\$i); printf(\"'%s'\",\$i);}"

(打印除最后一个字段外的所有字段和逗号)

答案 1 :(得分:1)

使用awk gsub功能。此处所有“,”都替换为','并开始,行的结尾替换为“'”。

echo $x |awk -v q="'" '{gsub(/,/, q "&" q);gsub(/^|$/,q)}1'
'abc','defg','hijklm','op','qrs','tuv'

答案 2 :(得分:0)

awk '{gsub(/,/,"\47,\47");print "\47"$0"\47"}' file

'abc','defg','hijklm','op','qrs','tuv'

答案 3 :(得分:0)

另一个awk

$ awk -F, -v OFS="','" -v q="'" '{$1=q $1; print $0 q}' file