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