Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
在awk中使用sed_Awk_Sed - Fatal编程技术网

在awk中使用sed

在awk中使用sed,awk,sed,Awk,Sed,见下一行: 1 164184236 DEL00004514;DEL00004533 N <DEL> . PASS . GT:GL:GQ:FT:RCL:RC:RCR:CN:DR:DV:RR:RV . . . . 0/1:-11.985,0,-35.4847:120:PASS:20:18:19:1:0:0:12:6 . . . . . . . . . . . . . 0/1:-6.194

见下一行:

1   164184236   DEL00004514;DEL00004533 N   <DEL>   .   PASS    .   GT:GL:GQ:FT:RCL:RC:RCR:CN:DR:DV:RR:RV   .   .   .   .   0/1:-11.985,0,-35.4847:120:PASS:20:18:19:1:0:0:12:6 .   .   .   .   .   .   .   .   .   .   .   .   .   0/1:-6.1941,0,-9.19766:62:PASS:4:3:2:1:0:0:3:3  .   .   .   .   .   .   .   .   .   .   .   .   .   .   0/1:-9.19536,0,-11.6939:92:PASS:4:5:7:1:0:0:4:4 .   .   .   .   .   .   .   .   .   .   .   .
1164184236 DEL00004514;DEL00004533 N。通过。GT:GL:GQ:FT:RCL:RC:RCR:CN:DR:DV:RR:RV。0/1:-11.985,0,-35.4847:120:通过:20:18:19:1:0:0:12:6。0/1:-6.1941,0,-9.19766:62:通过:4:3:2:1:0:0:3:3。0/1:-9.19536,0,-11.6939:92:通过:4:5:7:1:0:0:4:4。
我的目的是:对于所有列,如果它是
,那么我想将其更改为
0/0
,那么我该怎么做呢?我正在考虑在awk中引入sed,例如:
awk'{if($n=“.”)sed's/\./0\/0/g'}'

确切地说,我应该怎么做?

下面是我将使用的awk命令:

awk'{for(i=1;i以下是我将使用的awk命令:

awk'{for(i=1;i带sed),对于三个空格的列分隔符:

sed 's/\( \{3\}\)\./\10\/0/g' file
如果以制表符分隔:

sed 's/\t\./\t0\/0/g' file
输出:

1   164184236   DEL00004514;DEL00004533 N   <DEL>   0/0   PASS    0/0   GT:GL:GQ:FT:RCL:RC:RCR:CN:DR:DV:RR:RV   0/0   0/0   0/0   0/0   0/1:-11.985,0,-35.4847:120:PASS:20:18:19:1:0:0:12:6 .   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/1:-6.1941,0,-9.19766:62:PASS:4:3:2:1:0:0:3:3  .   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/1:-9.19536,0,-11.6939:92:PASS:4:5:7:1:0:0:4:4 .   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0

从找到的第二个
开始替换,假设前五列没有点值。

使用sed,对于三个空格的列分隔符:

sed 's/\( \{3\}\)\./\10\/0/g' file
如果以制表符分隔:

sed 's/\t\./\t0\/0/g' file
输出:

1   164184236   DEL00004514;DEL00004533 N   <DEL>   0/0   PASS    0/0   GT:GL:GQ:FT:RCL:RC:RCR:CN:DR:DV:RR:RV   0/0   0/0   0/0   0/0   0/1:-11.985,0,-35.4847:120:PASS:20:18:19:1:0:0:12:6 .   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/1:-6.1941,0,-9.19766:62:PASS:4:3:2:1:0:0:3:3  .   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/1:-9.19536,0,-11.6939:92:PASS:4:5:7:1:0:0:4:4 .   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0   0/0

从找到的第二个
开始替换,假设前五列没有点值。

sed仅用于在单个行上进行简单替换。此作业比注释中要求不更改第六个字段的要求稍微多一些,因此适合此作业的工具是awk:

$ awk 'BEGIN{FS=OFS="\t"} {for (i=1;i<=NF;i++) if (($i==".") && (i!=6)) $i="0/0"} 1' file
1       164184236       DEL00004514;DEL00004533 N       <DEL>   .       PASS    0/0     GT:GL:GQ:FT:RCL:RC:RCR:CN:DR:DV:RR:RV   0/0   0/0      0/0     0/0     0/1:-11.985,0,-35.4847:120:PASS:20:18:19:1:0:0:12:6     0/0     0/0     0/0     0/0     0/0     0/0     0/0   0/0      0/0     0/0     0/0     0/0     0/0     0/1:-6.1941,0,-9.19766:62:PASS:4:3:2:1:0:0:3:3  0/0     0/0     0/0     0/0     0/0   0/0      0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/1:-9.19536,0,-11.6939:92:PASS:4:5:7:1:0:0:4:4 0/0     0/0   0/0      0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0

$awk'BEGIN{FS=OFS=“\t”}{for(i=1;ised仅用于单个行上的简单替换,仅此而已。此作业比注释中要求不更改第6个字段的要求稍微多一些,因此适合此作业的工具是awk:

$ awk 'BEGIN{FS=OFS="\t"} {for (i=1;i<=NF;i++) if (($i==".") && (i!=6)) $i="0/0"} 1' file
1       164184236       DEL00004514;DEL00004533 N       <DEL>   .       PASS    0/0     GT:GL:GQ:FT:RCL:RC:RCR:CN:DR:DV:RR:RV   0/0   0/0      0/0     0/0     0/1:-11.985,0,-35.4847:120:PASS:20:18:19:1:0:0:12:6     0/0     0/0     0/0     0/0     0/0     0/0     0/0   0/0      0/0     0/0     0/0     0/0     0/0     0/1:-6.1941,0,-9.19766:62:PASS:4:3:2:1:0:0:3:3  0/0     0/0     0/0     0/0     0/0   0/0      0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/1:-9.19536,0,-11.6939:92:PASS:4:5:7:1:0:0:4:4 0/0     0/0   0/0      0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0

$awk'BEGIN{FS=OFS=“\t”}{for(i=1;iCool.Mine是制表符分隔的…。但实际上还有另一个问题:我必须将第6列保留为“.”,所以我尝试了awk'{$6=“.”“print}“,但是制表符丢失了
传递之间的
?更新了我的答案。酷。我的是制表符分隔的…但实际上还有另一个问题:我必须将第6列保留为”“。所以我尝试了awk'{$6=“.”“print}”,但是tab会丢失
PASS
之间的
?更新了我的答案。sed和awk是两个不同的工具,每个工具都可以从shell调用。你永远不会从awk调用sed,反之亦然。请阅读Arnold Robbins的《有效的awk编程》,第四版。sed和awk是两个不同的工具,每个工具都可以从shell调用。你永远不会从awk调用sed,反之亦然。请阅读Arnold Robbins的《有效的awk编程》,第四版。