使用awk和/或bash查找床文件中最长的区域长度

时间:2015-02-09 20:02:05

标签: bash awk

我需要在整个床文件中找到最长的区域。我知道如何找到某个chr的覆盖范围,但我不知道如何找到每个区域的覆盖范围(也就是长度的最终开始,或者3美元到2美元)。一旦我知道了该命令,我知道如何按编号排序。我只知道介绍bash和介绍awk。任何帮助都会很棒!

1 个答案:

答案 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块中,遍历数组并输出键/值对。
  • (可选)将输出发送到带有标记的排序以进行反转,对输出中的第二个字段进行数字排序。