2013-09-25 100 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