Awk 打印每个标识的最小值和最大值

Awk 打印每个标识的最小值和最大值,awk,grep,max,min,dataframe,Awk,Grep,Max,Min,Dataframe,我有一个基因列表,上面有它们的开始和结束。这些基因通常有不同的亚型,因此我想创建一个具有最小起始值和最大结束值的新文件 因此: 输入: Chromosome Start position (bp) Stop position (bp) Gene name 1 67000041 67208778 SGIP1 1 48999844 50489468 AGBL4 1 16767256 16785385 NECAP2 1 25072044 2

我有一个基因列表,上面有它们的开始和结束。这些基因通常有不同的亚型,因此我想创建一个具有最小起始值和最大结束值的新文件

因此:

输入:

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{Start position(bp)}和MAX{Stop position(bp)}

有grep/awk技巧可以做到这一点吗?如果必要的话,我甚至会玩一个Excel的把戏


谢谢

这可能适合您:

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
awk'NR==1{print;next}
{s[$4]=!s[$4]| |$2e[$4]?$3:e[$4]}
结束{对于(x in s)打印“1”,s[x],e[x],x}'文件
与您的文件一起:

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
kent$awk'NR==1{print;next}
{s[$4]=!s[$4]| |$2e[$4]?$3:e[$4]}
结束{对于(s中的x)打印“1”,s[x],e[x],x}'f
染色体起始位置(bp)停止位置(bp)基因名称
1 67000041 67208778 SGIP1
1 226420000 226496888 LIN9
1 8384389 8404073 SLC45A1
1 33547850 33585783 ADC
1 25072044 25167428 CLIC4
1489998450489468 AGBL4
1 16767256 16785491 NECAP2
100661810 100715376 DBT
1 92149295 92351836 TGFBR3
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