Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在逗号和shell之间的字符串中添加引号_Shell_Awk_Sed - Fatal编程技术网

在逗号和shell之间的字符串中添加引号

在逗号和shell之间的字符串中添加引号,shell,awk,sed,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次出现之前的所有内容都替换为引号 我尝试了awk的一些选项,但无法实现。无论如何,我要把这件事做完 提前谢谢 试试看: x='1,2,A,N,53

我有一根像

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次出现之前的所有内容都替换为引号

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

提前谢谢

试试看:

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
因此,我在这里创建了一个变量“并将字段分隔符设置为逗号。然后我根据您的要求使用s1和$9重新创建第9个字段。然后从最后一个字段重新创建第13个字段(需要注意的是,此处没有字段编号的硬编码,因此可能有任意数量的字段)并将s1的值添加到当前值的最后一个。然后提到1将打印该行。将s(输出字段分隔符)也设置为逗号。

尝试:

所以我在这里创建一个变量,它是“并将字段分隔符设置为逗号”。然后,我将根据您的要求用s1和9美元重新创建第9个字段。然后从最后一个字段重新创建第13个字段(需要注意的是,此处没有字段编号的硬编码,因此可能有任意数量的字段),并将s1的值添加到当前值的最后一个字段中。然后,1将打印该行。将S(输出字段分隔符)也设置为逗号。

这可能适用于您(GNU-sed):

之后和之前插入
8和11。

这可能适用于您(GNU-sed):

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
之后和之前插入
8和11

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
这里的要点是避开插入符号


这里的要点是转义插入符号。

因此,如果我将字符串作为txt文件传递给变量,它将以相同的方式工作。我想知道多行是否一起传递。这是从前面开始计算字段。。我从前面数第9个,从后面数第12个..因此,如果我将字符串作为txt文件传递给变量,它将以相同的方式工作。我想知道多行是否一起传递。这是从前面开始计算字段。。我从前面数第九,从后面数第十二。。
awk -v s1="\"" -F, '{$9=s1 $9;$(NF-12)=$(NF-12) s1} 1' OFS=,   Input_file
sed 's/,/&"/8;s/,/"&/11' file
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