为了统计处理之后数据集内,染色体上指定长度的窗口内 SV 的数目,一时没想到合适的计算方法。
(vcftools 可以计算,但是尝试后发现无法指定步长,只好放弃)
想着原理上也不麻烦,就自己写一下。如下图所示格式的数据集,当然,只要有下面两列信息,包含其它信息也没关系,稍微改动一下即可。统计一定长度窗口内的行数,带步长的滑窗进行统计。
示例数据格式#! /bin/sh
# Calculate variant number of a window with steps.
# usage: sh script
chr = (chr01 chr02 chr03 chr04 chr05 chr06 chr07 chr08 chr09 chr10 chr11 chr12)
length = (43270923 35937250 36413819 35502694 29958434 31248787 29697621 28443022 23012720 23207287 29021106 27531856)
for i in {0..11}
do
for ((j=1; j<=${length[$i]}; j+=100000))
do
cat pav | awk -v s=${chr[$i]} -v c=$j '{if($1==s && $2 > c && $2 <= c+200000) print $0}' > pav.${chr[$i]}.$
wc -l pav.${chr[$i]}.$j >> num_win
rm pav.${chr[$i]}.$j
done
done
# 两个数组分别指定染色体名称和染色体长度;
# 数组内第一个元素为 0,用于遍历数组内的元素。
# for 循环中的数值运算,指定初始值,限制值,和赋值运算;这里表示每一次循环增加100kb,即步长。
# 将每个窗口范围内的行生成一个新文件,统计行数后删除;
# awk 在引用外部变量时,需要用 -v 参数指定;
就是,如果觉得有用的话,登录一下账号点个赞支持一下,欢迎评论交流!
网友评论