2013-09-25 69 views
0

我有一个包含它们开始和结束的基因列表。这些基因通常有不同的同种型,所以我想用最小的起始值和最大的最终值创建一个新的文件。打印每个标识的最小值和最大值

所以:

输入:

Chromosome Start position (bp) Stop position (bp) Gene name 
1 67000041 67208778 SGIP1 
1 48999844 50489468 AGBL4 
1 16767256 16785385 NECAP2 
1 25072044 25167428 CLIC4 
1 33547850 33585783 ADC 
1 16767256 16785385 NECAP2 
1 16767256 16785491 NECAP2 
1 8384389  8404073  SLC45A1 
1 92149295 92327088 TGFBR3 
1 100661810 100715376 DBT 
1 92149295 92327088 TGFBR3 
1 92149295 92327088 TGFBR3 
1 92351836 92351836 TGFBR3 
1 226420201 226496888 LIN9 
1 226420000 226485422 LIN9 
1 226420201 226496888 LIN9 

所需的输出:

Chromosome Start position (bp) Stop position (bp) Gene name 
1 67000041 67208778 SGIP1 
1 48999844 50489468 AGBL4 
1 16767256 16785491 NECAP2 
1 25072044 25167428 CLIC4 
1 33547850 33585783 ADC 
1 8384389  8404073  SLC45A1 
1 92149295 92351836 TGFBR3 
1 100661810 100715376 DBT 
1 226420000 226496888 LIN9 

从本质上讲,我想单独采取每一个基因,并得到MIN {起始位置(BP)}和MAX {停止位置(bp)}。

是否有grep/awk技巧来做到这一点?我甚至会在必要时采取Excel技巧!

感谢

回答

2

这可能会为你工作:

awk 'NR==1{print;next} 
{s[$4]=!s[$4]||$2<s[$4]?$2:s[$4];e[$4]=!e[$4]||$3>e[$4]?$3:e[$4]} 
END{for(x in s)print "1", s[x],e[x],x}' file 

与您的文件:

kent$ awk 'NR==1{print;next} 
{s[$4]=!s[$4]||$2<s[$4]?$2:s[$4];e[$4]=!e[$4]||$3>e[$4]?$3:e[$4]} 
END{for(x in s)print "1", s[x],e[x],x}' f 
Chromosome Start position (bp) Stop position (bp) Gene name 
1 67000041 67208778 SGIP1 
1 226420000 226496888 LIN9 
1 8384389 8404073 SLC45A1 
1 33547850 33585783 ADC 
1 25072044 25167428 CLIC4 
1 48999844 50489468 AGBL4 
1 16767256 16785491 NECAP2 
1 100661810 100715376 DBT 
1 92149295 92351836 TGFBR3 
+0

这似乎几个基因我的工作我看了看。 – Joni

0
awk -v OFS='\t' ' 
    NR==1 {print; next} 
    { 
     key = $1 OFS $2 
     if (!(key in min)) { 
      min[key]=$3; max[key]=$4 
     } else { 
      if ($3 < min[key]) min[key]=$3 
      if ($4 > max[key]) max[key]=$4 
     } 
    } 
    END { 
     for (key in min) 
      print key, min[key], max[key] 
    } 
' 
Chromosome Start position (bp) Stop position (bp) Gene name 
1 48999844 50489468 AGBL4 
1 92149295 92327088 TGFBR3 
1 16767256 16785385 NECAP2 
1 226420201 226496888 LIN9 
1 25072044 25167428 CLIC4 
1 226420000 226485422 LIN9 
1 8384389 8404073 SLC45A1 
1 33547850 33585783 ADC 
1 92351836 92351836 TGFBR3 
1 100661810 100715376 DBT 
1 67000041 67208778 SGIP1