簡體   English   中英

在awk內使用sed

[英]Use sed within awk

請參閱以下行:

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 .   .   .   .   .   .   .   .   .   .   .   .

我的目的是:對於所有列,如果是. 那么我想更改為0/0 ,那我該怎么做呢? 我正在考慮在awk中引入sed,例如: awk '{if($n= ".") sed 's/\\./0\\/0/g'}'確切地我該怎么辦

sed用於單行替換,僅此而已。 這項工作比您評論中要求不要更改第6個字段的要求多一點,因此該工作的正確工具是:

$ 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命令:
awk '{for(i = 1; i <= NF; i++) {if ($(i) == ".") {$(i)="0/0"}} print $0}'

測試:

echo "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 .   .   .   .   .   .   .   .   .   .   .   ." | awk '{for(i = 1; i <= NF; i++) {if ($(i) == ".") {$(i)="0/0"}} print $0}'

給出:

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/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

使用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 's/\t\./\t0\/0/2g' file

從秒開始替換. 發現,假設前五列沒有點值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM