2014-01-18 269 views
-1

我有一個文本文件如下提取數據

ID  Name position_start position_end 
ID01 P889  290  298 
ID01 P889  290  299 
ID02 O991  400  405 
ID02 O991  355  373 
ID02 O991  403  404 
ID05 Q151  428  429 
ID05 Q151  428  428 
ID05 Q151  24  24 
ID05 Q151  14  25 

我想提取最長的起點和每個ID的結束位置。我所需的輸出如下所示。

ID  Name position_start position_end 
    ID01 P889  290  299 
    ID02 O991  400  405 
    ID02 O991  355  373 
    ID05 Q151  428  429 
    ID05 Q151  14  25 
+0

你是什麼時間最長的起始和結束位置是什麼意思? –

+0

例如,ID01有兩個職位290至298和290至299.我需要從290至299的職位。希望你能理解! – user3209035

+0

爲什麼ID02/O991有兩個輸出?爲什麼兩個ID05/Q151?長度不一樣,所以它不是一個處理關係的問題。數據是否按排序順序顯示?如果您在標籤中使用'awk',則可能無所謂。 –

回答

2
sort -k1,1 -k2,2 -k3,3n -k4,4n file > temp 

awk 'NR==1{print;next} 
NR==2{start=$3;end=$4;id=$1 OFS $2;next} 
{ if ($1 OFS $2 == id &&$3<=end) 
     {end=end>$4?end:$4;next} 
    print id,start,end;start=$3;end=$4;id=$1 OFS $2 
}END{print id,start,end}' OFS="\t" temp 

ID  Name position_start position_end 
ID01 P889 290  299 
ID02 O991 355  373 
ID02 O991 400  405 
ID05 Q151 14  25 
ID05 Q151 428  429 
+0

非常棒!非常感謝你!! – user3209035