2017-06-16 67 views
0

我有一个像报价为字符串添加逗号之间的外壳

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开始到第12次出现comman(,)从最后到引号。

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

在此先感谢。

回答

1

尝试:

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

所以在这里我想提出一个变量,它是“,使现场分隔为逗号然后我重新创建第9根据您的要求使用s1和$ 9,然后从最后一个字段重新创建第13个字段(在这里指出没有字段编号的硬编码,因此它可能有任意数量的字段),并在当前值的最后加上s1的值。 mentio宁1将打印该行。将OFS(输出字段分隔符)也设置为逗号。

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报价被存储于命名为q变量。然后,更改所需列的值以获得所需的结果。您可以更改列的值以获得任何其他结果。

对于文件:

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

因此,如果我将它作为txt文件传递,它将以相同的方式工作,而不是将字符串分配给变量。正如想知道是否有多条线路一起传递。 – user2854333

+0

是的,它会工作。 .... –

+1

很酷..谢谢 – user2854333

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 
0

这可能为你工作(GNU SED):

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

插入"'八不过午。

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 

这里的优点是要脱掉插入符号。

相关问题