Extract specific data and change its arrangment

Input:

HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    beginner    836    7001        +    ID=g1.t1;Parent=g1
HS04636    PROGRAM    position    836    836        +    Parent=g1.t1
HS04636    PROGRAM    type    836    1017        +    Parent=g1.t1
HS04636    PROGRAM    style    966    968    .        Parent=g1.t1
HS04636    PROGRAM    range    966    1017        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    range    1818    1934        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    1818    1934        +    Parent=g1.t1
HS04636    PROGRAM    range    2055    2198        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    2055    2198        +    Parent=g1.t1

HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    range    2852    2995        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    2852    2995        +    Parent=g1.t1
HS04636    PROGRAM    range    3426    3607        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    3426    3607        +    Parent=g1.t1

Desired output:

HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    type    836    1017        +    Parent=g1.t1
HS04636    PROGRAM    range    966    1017        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    1818    1934        +    Parent=g1.t1
HS04636    PROGRAM    range    1818    1934        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    2055    2198        +    Parent=g1.t1
HS04636    PROGRAM    range    2055    2198        +    ID=g1.t1.range;Parent=g1.t1

HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    type    2852    2995        +    Parent=g1.t1
HS04636    PROGRAM    range    2852    2995        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    3426    3607        +    Parent=g1.t1
HS04636    PROGRAM    range    3426    3607        +    ID=g1.t1.range;Parent=g1.t1

The awk code that I have try and its respectively output result which is different with my desired output result:

awk '$3~/source/||/type/||/range/{print}' input file
HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    type    836    1017        +    Parent=g1.t1
HS04636    PROGRAM    range    966    1017        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    range    1818    1934        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    1818    1934        +    Parent=g1.t1
HS04636    PROGRAM    range    2055    2198        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    2055    2198        +    Parent=g1.t1

HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    range    2852    2995        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    2852    2995        +    Parent=g1.t1
HS04636    PROGRAM    range    3426    3607        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    3426    3607        +    Parent=g1.t1

Actually I plan to extract all the content related to "source" "range" "type" and then from the content, I plan to arrange the data follow the arrangement of one "source" attached with "type" and then "range" subsequently.
Sorry if I can't express well what I desired.
Hopefully from the desired output result shown above, anybody can guide me to archive my desired goal?
Thanks again and a lot.

please try this

awk '{if($3 ~ /type/ || /range/ || /source/) { var=$0; if($var ! $0) {print;} }}' filename

Hi ktrimu,
I just try the awk code that you suggested.
Unfortunately, it can't give my desired output result :frowning:
Your awk code give the output result same as what my wrong awk code did :frowning:

awk '{if($3 ~ /type/ || /range/ || /source/) { var=$0; if($var ! $0) {print;} }}' filename
HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    type    836    1017        +    Parent=g1.t1
HS04636    PROGRAM    range    966    1017        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    range    1818    1934        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    1818    1934        +    Parent=g1.t1
HS04636    PROGRAM    range    2055    2198        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    2055    2198        +    Parent=g1.t1

HS04636    PROGRAM    source    836    7001        +    ID=g1
HS04636    PROGRAM    range    2852    2995        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    2852    2995        +    Parent=g1.t1
HS04636    PROGRAM    range    3426    3607        +    ID=g1.t1.range;Parent=g1.t1
HS04636    PROGRAM    type    3426    3607        +    Parent=g1.t1

Do you got any better advice or suggestion to improve the awk code to reach my desired output result?
Thanks again and a lot for your advice.