我有这样的文件(超过 1 个缺少行)
20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51
20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50
20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 0|0:21:6:23,27
20 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60
20 1234567 GTC G,GTCT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4
我需要分割为滑动窗口并像这样计算“0/0”位置
Pos Count
1-10001 0
2-10002 1
3-10003 0
为了计算每 10000 个位置,我使用了这个 cmd
tail -n +11 file |
awk -v n=10000 '/0\/0/{c++} NR%n==0{print c; c=0} END {if (NR%n!=0) print c}'
第一个解决方案:完全基于您所展示的尝试,用 GNU 编写awk
。由于样本中没有 0/0 值,因此无法进行太多测试,应该可以通过。采取tail
来自OP尝试本身的命令。
tail -n +11 Input_file |
awk -v n="10000" '
NR%n==0{
++occur
print n+occur,count
count=""
}
/0\/0/{
count++
}
END{
++occur
if(count){ print n+occur }
}
'
第二个解决方案:如果您多次出现以下情况0/0
在你的行中,并且你想计算每行中的所有内容,然后尝试遵循与第一个解决方案略有不同的方法。
tail -n +11 Input_file |
awk -v n="10000" '
NR%n==0{
++occur
print n+occur,count
count=""
}
{
count+=gsub(/0\/0/,"&")
}
END{
++occur
if(count){ print n+occur }
}
'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)