- 论坛徽章:
- 16
|
回复 2# 小小脑
# 第一行赋值,
awk 'NR==1{key=$1;begin=$2;end=$3;temp=$0;max=$4}NR>1{
# 如果下一行key相等,
if(key==$1 ) {
# 那么,比较$3,如果$3相等,获得最大值,备用,保留该行,直接next,跳过剩余的if比较。
if ( $3 == end ) { max=$4;temp=$0;next}
# 如果覆盖,比较$4, 取得最大值max和该行。
if ( ($3>= begin && $3<=end) || ($2>=begin && $2<=end) || ($2>=begin && $3 <=end) ){
if(max<$4) {max=$4;temp=$0 }
# 如果key相等,但又不覆盖,打印,reset值。
} else {print temp;key=$1;begin=$2;end=$3;temp=$0;max=$4}
}
# 如果key不相等,把上一个符合的打印出来。
else {print temp;key=$1;begin=$2;end=$3;temp=$0;max=$4}
# 如果一直满足,key一直相等,是走不到else部分的,只能在END部分打印出来。
}END{print temp}' a
---------------------
awk 'NR==1{key=$1;begin=$2;end=$3;temp=$0;max=$4}NR>1{
if(key==$1 ) {
if ( $3 == end ) { max=$4;temp=$0;next}
if ( ($3>= begin && $3<=end) || ($2>=begin && $2<=end) || ($2>=begin && $3 <=end) ){
if(max<$4) {max=$4;temp=$0 }
} else {print temp;key=$1;begin=$2;end=$3;temp=$0;max=$4}
}
else {print temp;key=$1;begin=$2;end=$3;temp=$0;max=$4}
}END{print temp}' a
scaffold04031 63010 63526 708
scaffold04031 67587 68099 701
scaffold00714 104409 103928 686
scaffold02012 133918 134432 776
,
总结,708是在key相等的 else处打印,701,686在key不相等的else打印,776在END处打印。
|
|