在逗号shell之间添加引号

时间:2017-06-16 06:07:06

标签: shell awk sed

我有一个像

这样的字符串
1,2,A,N,53,3,R,R,^A,-C,-T,2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P

现在,我正在努力实现以下字符串

1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P

所以,我试图在第8次出现逗号(,)后从开始到第12次出现comman(,)从end到引号之前替换所有内容。

我尝试了一些awk选项但无法实现它。无论如何要完成这件事。

提前致谢。

5 个答案:

答案 0 :(得分:1)

x='1,2,A,N,53,3,R,R,^A,-C,-T,2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P'

awk -F, -v OFS=,  -v q='"' '{$9=q $9;$11=$11 q}1' <<< "$x"
1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P

说明:此处FSOFS设置为逗号,因为输入流是CSV.double quote存储在名为q的变量中。然后改变所需列的值以获得所需的结果。您可以更改列的值以获取任何其他结果。

对于文件:

awk -F, -v OFS=,  -v q='"' '{$9=q $9;$11=$11 q}1' inputfile

答案 1 :(得分:1)

$ awk -v FS=',' -v OFS=',' '{$9="\"" $9;$11=$11"\""; print}' your_file
1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P

答案 2 :(得分:1)

尝试:

awk -v s1="\"" -F, '{$9=s1 $9;$(NF-12)=$(NF-12) s1} 1' OFS=,   Input_file

所以我在这里制作一个变量&#34;并将字段分隔符设置为逗号。然后我按照你的要求用s1和$ 9重新创建第9个字段。然后从最后重新创建第13个字段(这里要注意没有字段编号的硬编码,因此它可以有任意数量的字段)并在其最后一个当前值中添加s1&#39的值。然后提到1将打印该行。将OFS(输出字段分隔符)设置为逗号。

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/,/&"/8;s/,/"&/11' file

"八和十一之后和之前插入'

答案 4 :(得分:0)

awk '{sub(/\^A,-C,-T/,"\42^A,-C,-T\42")}1' file

1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P

这里的优点是逃避插入符号。