我有一系列基因的起点和终点。这些基因通常有不同的同种型,因此我想创建一个具有最小起始值和最大结束值的新文件。
所以:
输入:
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技巧!
由于
答案 0 :(得分:2)
这可能适合你:
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
答案 1 :(得分:0)
awk -v OFS='\t' '
NR==1 {print; next}
{
key = $1 OFS $2
if (!(key in min)) {
min[key]=$3; max[key]=$4
} else {
if ($3 < min[key]) min[key]=$3
if ($4 > max[key]) max[key]=$4
}
}
END {
for (key in min)
print key, min[key], max[key]
}
'
Chromosome Start position (bp) Stop position (bp) Gene name
1 48999844 50489468 AGBL4
1 92149295 92327088 TGFBR3
1 16767256 16785385 NECAP2
1 226420201 226496888 LIN9
1 25072044 25167428 CLIC4
1 226420000 226485422 LIN9
1 8384389 8404073 SLC45A1
1 33547850 33585783 ADC
1 92351836 92351836 TGFBR3
1 100661810 100715376 DBT
1 67000041 67208778 SGIP1