2015-02-09 64 views
-2

我需要找到整个床文件中最长的区域。我知道如何找到某个特定区域的覆盖范围,但我不知道如何找到每个区域的覆盖范围(也就是长度结束开始或$ 3- $ 2)。一旦我知道命令,我知道如何按数字排序。我只知道介绍bash和介绍awk。任何帮助将是伟大的!使用awk和/或bash查找床文件中最长的区域长度

+4

你的问题根本没有任何意义。什么是床档?请更新一些输入数据和预期输出的问题。 – 2015-02-09 20:04:08

回答

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并使用$3-$2的差异填充$1键。
  • 遇到相同的区域中的每个时间,更新关联的总和(在+=
  • END块,通过阵列和输出的键/值对循环。
  • (可选)将输出发送到带有标志的排序以反向输出中的第二个字段。