我需要在整个床文件中找到最长的区域。我知道如何找到某个chr的覆盖范围,但我不知道如何找到每个区域的覆盖范围(也就是长度的最终开始,或者3美元到2美元)。一旦我知道了该命令,我知道如何按编号排序。我只知道介绍bash和介绍awk。任何帮助都会很棒!
答案 0 :(得分:0)
在黑暗中拍摄基于:http://uswest.ensembl.org/info/website/upload/bed.html?redirect=no
在那里使用数据:
chr1 213941196 213942363
chr1 213942363 213943530
chr1 213943530 213944697
chr2 158364697 158365864
chr2 158365864 158367031
chr3 127477031 127478198
chr3 127478198 127479365
chr3 127479365 127480532
chr3 127480532 127481699
并注意到我看到的区域中唯一提到的区域与染色体名称有关,我假设区域代表具有相同$1
字段的多条线。
对区域进行求和可以这样完成:
awk '{ a[$1]+=($3-$2) } END {for( k in a ) { print k, a[k] }}' data
,输出如下:
chr1 3501
chr2 2334
chr3 4668
然后您可以使用" -nr -k2,2"进行排序。标志如:
awk '{ a[$1]+=($3-$2) } END { for( k in a ) { print k, a[k] } }' data | sort -nr -k2,2
chr3 4668
chr1 3501
chr2 2334
awk是:
a
并使用$1
的差异填充$3-$2
个键。+=
)END
块中,遍历数组并输出键/值对。