根据某些条件从文本文件中提取数据

时间:2014-01-18 05:16:27

标签: awk gawk

我有一个文本文件如下

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

1 个答案:

答案 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