[英]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.