Ввод текста в скользящее окно и подсчет

#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 }
  }
'