我有一个文本文件如下
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 :(得分: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