#!/usr/bin/perl
use strict;
use warnings;
if(@ARGV != 3){
die "Usage: perl $0 <input_file> <window_size> <step>\n";
}
my ($file, $win_size, $step) = @ARGV;
my $chr_col = 0;
my $start_col = 1;
my $end_col = 2;
my %chr_qtls;
open(my $fh, "<", $file) or die "Cannot open $file: $!";
<$fh>; # 跳过表头
while(<$fh>){
chomp;
next if $_ eq '';
my @f = split(/\t/);
push @{$chr_qtls{$f[$chr_col]}}, [$f[$start_col], $f[$end_col]];
}
close $fh;
foreach my $chr (sort keys %chr_qtls){
my $max_pos = 0;
foreach my $qtl (@{$chr_qtls{$chr}}){
$max_pos = $qtl->[1] if $qtl->[1] > $max_pos;
}
for(my $win_start = 0; $win_start <= $max_pos; $win_start += $step){
my $win_end = $win_start + $win_size - 1;
my $count = 0;
foreach my $qtl (@{$chr_qtls{$chr}}){
if($qtl->[0] <= $win_end && $qtl->[1] >= $win_start){
$count++;
}
}
print join("\t", $chr, $win_start, $win_end, $count), "\n";
}
}
滑窗统计单位区间内的XX数目
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 不支持上传文件,所以就复制过来了。作者信息什么的都没删。对前端基本属于一窍不通,所以没有任何修改,反正用着没问题就...
- sub simulate_QTL_placement_with_size { my ($num_QTL, $ch...