![如何使用 if 语句在满足条件时执行一条命令,在不满足条件时执行另一条命令](https://linux22.com/image/198459/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20if%20%E8%AF%AD%E5%8F%A5%E5%9C%A8%E6%BB%A1%E8%B6%B3%E6%9D%A1%E4%BB%B6%E6%97%B6%E6%89%A7%E8%A1%8C%E4%B8%80%E6%9D%A1%E5%91%BD%E4%BB%A4%EF%BC%8C%E5%9C%A8%E4%B8%8D%E6%BB%A1%E8%B6%B3%E6%9D%A1%E4%BB%B6%E6%97%B6%E6%89%A7%E8%A1%8C%E5%8F%A6%E4%B8%80%E6%9D%A1%E5%91%BD%E4%BB%A4.png)
我有一个包含定义的最小和最大 rho 值的样本列表,
cat my.table
SAMPLE min_rho max_rho
RR26400a 0.1 0.3
RR26400c 0.2 0.4
RR26401a 0.1 0.7
RR26401c 0.5 0.8
RR26402a 0.4 0.7
我想问一下我感兴趣的焦点样本是否在
my.table 列表(如果它与 my.table 中 SAMPLE 列中的样本匹配)使用表中的值定义一个 min_rho 和 max_rho 变量,如果我感兴趣的样本与 SAMPLE 列中的任何样本都不匹配,则指定 0.1 作为 min_rho 和1 作为最大 rho。
这是一个简单的例子,我感兴趣的样品是 RR26400a,它位于 my.table 列表中
sample = "RR26400a"
min_rho=$(awk -v s=${sample} 'BEGIN {FS=OFS="\t"} $1 == s {print $2}' {params.min_max_rho});
max_rho=$(awk -v s=${sample} 'BEGIN {FS=OFS="\t"} $1 == s {print $3}' {params.min_max_rho});
我如何调整以使用 if 语句运行它并考虑样本在 my.table 中和不在 my.table 中的两种情况(分配默认值 0.1 和 1)
答案1
听起来这可能就是您想要做的:
$ cat tst.awk
BEGIN {
FS = OFS = "\t"
min = 0.1
max = 1
}
$1 == sample {
min = $2
max = $3
}
END {
print sample, min, max
}
$ awk -v sample='RR26400a' -f tst.awk my.table
RR26400a 0.1 0.3
$ awk -v sample='xx12345y' -f tst.awk my.table
xx12345y 0.1 1