识别间隔内的字符串,pt 1

时间:2015-04-28 19:53:55

标签: awk sed

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

输入

start end snp-pos region
392   508 410     
100   216 222 
269   388 198 

期望的输出

start  end  snp-pos  region
392    508  410      yes
100    216  222      no
269    388  198      no

1 个答案:

答案 0 :(得分:0)

$ 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

如果您关心列出的列,可以输入column -t

$ 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中完全处理它,例如:

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