Print minimum and maximum for each identity
我有一份基因的开始和结束列表。这些基因通常有不同的异构体,因此我想创建一个具有最小起始值和最大结束值的新文件。
所以:
输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 |
所需的输出:
1 2 3 4 5 6 7 8 9 10 | 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 技巧!
谢谢
这可能对你有用:
1 2 3 | 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 |
与您的文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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] } ' |
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |