ifステートメントを使用して条件が満たされたときに1つのコマンドを実行し、条件が満たされない場合に別のコマンドを実行する方法

ifステートメントを使用して条件が満たされたときに1つのコマンドを実行し、条件が満たされない場合に別のコマンドを実行する方法

最小および最大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

おすすめ記事