Awk 识别间隔内的字符串,第1部分

Awk 识别间隔内的字符串,第1部分,awk,sed,Awk,Sed,我想知道第3列是否在第1列和第2列中,在第4列中为每一行指明“是”或“否”。这在awk中可行吗 输入 期望输出 或者我们可以编写更多的代码,并完全在awk中处理,例如: awk 'NR==1{print;w=match($0,$NF)-1;next} {printf "%-*s%s\n", w, $0, ($3>$1 && $3<$2 ? "yes" : "no")}' file start end snp-pos region 392 508 410 y

我想知道第3列是否在第1列和第2列中,在第4列中为每一行指明“是”或“否”。这在awk中可行吗

输入 期望输出 或者我们可以编写更多的代码,并完全在awk中处理,例如:

awk 'NR==1{print;w=match($0,$NF)-1;next} {printf "%-*s%s\n", w, $0, ($3>$1 && $3<$2 ? "yes" : "no")}' file
start end snp-pos region
392   508 410     yes
100   216 222     no
269   388 198     no

awk'NR==1{print;w=match($0,$NF)-1;next}{printf“%-*s%s\n”,w,$0,($3>$1&&3I)更新了我的答案。您没有指定任何$2与$1或$3完全相同的情况,或者任何其他异常情况,因此您需要进行按摩以适应。
start  end  snp-pos  region
392    508  410      yes
100    216  222      no
269    388  198      no
$ awk 'NR==1{print;next} {print $0, ($3>$1 && $3<$2 ? "yes" : "no")}' file
start end snp-pos region
392   508 410 yes
100   216 222 no
269   388 198 no
$ awk 'NR==1{print;next} {print $0, ($3>$1 && $3<$2 ? "yes" : "no")}' file | column -t
start  end  snp-pos  region
392    508  410      yes
100    216  222      no
269    388  198      no
awk 'NR==1{print;w=match($0,$NF)-1;next} {printf "%-*s%s\n", w, $0, ($3>$1 && $3<$2 ? "yes" : "no")}' file
start end snp-pos region
392   508 410     yes
100   216 222     no
269   388 198     no