我有一个像
这样的字符串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选项但无法实现它。无论如何要完成这件事。
提前致谢。
答案 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
说明:此处FS
和OFS
设置为逗号,因为输入流是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
这里的优点是逃避插入符号。