#awk
#awk
Вопрос:
У меня есть файл (более 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}'
Комментарии:
1. Извините, но это непонятно. Не могли бы вы, пожалуйста, упомянуть более подробную информацию, например, о том, как ожидается ваш ожидаемый результат (логика его получения) в вашем вопросе, и тогда сообщите нам об этом.
Ответ №1:
1-е решение: полностью основано только на ваших показанных попытках, написано на 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 }
}
'
2-е решение: если у вас есть несколько вхождений 0/0
в ваших строках, и вы хотите посчитать все в каждой строке, попробуйте следовать немного отличающемуся от 1-го решения.
tail -n 11 Input_file |
awk -v n="10000" '
NR%n==0{
occur
print n occur,count
count=""
}
{
count =gsub(/0/0/,"amp;")
}
END{
occur
if(count){ print n occur }
}
'