if 문을 사용하여 조건이 충족될 때 하나의 명령을 실행하고 조건이 충족되지 않을 때 다른 명령을 실행하는 방법

if 문을 사용하여 조건이 충족될 때 하나의 명령을 실행하고 조건이 충족되지 않을 때 다른 명령을 실행하는 방법

최소 및 최대 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

관련 정보