我有以下向量可以根據另一個陣列獲取不同的條目。
PIP_IDSAMPLE_TYPE_IDSMPX_KIT_IDS
根據這些內容,我使用if陳述句/規則創建不同的檔案。例如:
if [ $PIP_ID == 8 ]; then
EXTENSION="ATLAS_"
fi
if [[ $SAMPLE_TYPE_IDS == 81 ]] || [[ $SAMPLE_TYPE_IDS == 86 ]]; then
EXTENSION="SmartSeq3_"
fi
if [[ $SAMPLE_TYPE_IDS == 61 ]] || [[ $SAMPLE_TYPE_IDS == 72 ]] || [[ $SAMPLE_TYPE_IDS == 102]] || [[ $SAMPLE_TYPE_IDS == 84 ]] ; then
EXTENSION="scRNAv3_"
fi
if ([[ $MPX_KIT_IDS == 89 ]] || [[ $MPX_KIT_IDS == 91 ]] || [[ $MPX_KIT_IDS == 92 ]] || [[ $MPX_KIT_IDS == 93 ]]) && [[ SAMPLE_TYPE_IDS != 105 ]] ; then
EXTENSION="AGENTtrim_"
fi
if [[ $MPX_KIT_IDS == 17 ]] || [[ $MPX_KIT_IDS == 27 ]] || [[ $MPX_KIT_IDS == 53 ]]; then
EXTENSION="miRNA_"
fi
請注意,創建AGENTtrim_有多個 OR 與 && 陳述句組合在一起,并用括號分組。
如何使用 將它們變成更簡單、更優雅的解決方案case?我不知道如何將所有 3 個變數合二為一,因為創建AGENTtrim_從 2 個獨立變數獲取資訊的那個。
uj5u.com熱心網友回復:
將其轉換為 case 陳述句會很丑陋。您可以通過使用擴展模式匹配來簡化它。
if [[ $MPX_KIT_IDS == @(89|91|92|93) && $SAMPLE_TYPE_IDS != 105 ]]; then
EXTENSION="AGENTtrim_"
elif [[ $MPX_KIT_IDS == @(17|27|53) ]]; then
EXTENSION="miRNA_"
elif [[ $SAMPLE_TYPE_IDS == @(81|86) ]]; then
EXTENSION="SmartSeq3_"
elif [[ $SAMPLE_TYPE_IDS == @(61|72|102|84) ]]; then
EXTENSION="scRNAv3_"
elif [[ $PIP_ID == 8 ]]; then
EXTENSION="ATLAS_"
fi
uj5u.com熱心網友回復:
老實說,我不知道如何將所有 3 個變數合二為一
您可以將它們與分隔符放在一起。例如,假設值中沒有逗號,只需選擇一個逗號作為分隔符并執行字串:
shopt -s extglob
case "$PIP_ID,$SAMPLE_TYPE_IDS,$MPX_KIT_IDS" in
8,*) EXTENSION="ATLAS_" ;;
*,81,*|*,86,*) EXTENSION="SmartSeq3_" ;;
*,61,*|*,72,*|*,102,*|*,85,*) EXTENSION="scRNAv3_" ;;
# with extended glob shopt -s extglob
*,!(105),@(89|91)) EXTENSION="AGENTtrim_" ;;
*,17|*,27|*,53) EXTENSION="miRNA_" ;;
# etc...
esac
uj5u.com熱心網友回復:
這可能有助于使代碼更清晰(使用bash):
代替
[[ $SAMPLE_TYPE_IDS == 61 ]] || [[ $SAMPLE_TYPE_IDS == 72 ]] || [[ $SAMPLE_TYPE_IDS == 102]] || [[ $SAMPLE_TYPE_IDS == 84 ]]
和
[[ $SAMPLE_TYPE_IDS =~ ^(61|72|102|84)$ ]]
uj5u.com熱心網友回復:
利用名稱可以闡明規則的函式。
atlas_pip() {
[[ $1 == 8 ]]
}
smart_id() {
[[ $1 =~ ^(61|72)$ ]]
}
rna_id() {
[[ $1 =~ ^(61|72|102|84)$ ]]
}
agent_id() {
[[ $1 =~ ^(89|91|92|93)$ ]]
}
mirna_id() {
[[ $1 =~ ^(17|27|53)$ ]]
}
atlas_pip $PIP_ID && EXTENSION="ATLAS_"
smart_id $SAMPLE_TYPE_IDS && EXTENSION="SmartSeq3_"
rna_id $SAMPLE_TYPE_IDS && EXTENSION="scRNAv3_"
agent_id $MPX_KIT_IDS && $SAMPLE_TYPE_IDS != 105 && EXTENSION="AGENTtrim_"
mirna_id $MPX_KIT_IDS && EXTENSION="miRNA_"
uj5u.com熱心網友回復:
如果您的非獨占if陳述句無法覆寫,因為后面的條件也滿足但具有更高的優先級,那么這個嵌套 case結構應該創建相同的有效邏輯。
case $PIP_ID in
8) EXTENSION="ATLAS_" ;;
*) case $SAMPLE_TYPE_IDS in # PIP_ID is NOT 8
8[16]) EXTENSION="SmartSeq3_" ;;
61|72|102|84) EXTENSION="scRNAv3_" ;;
*) case $MPX_KIT_IDS in
[12]7|53) EXTENSION="miRNA_" ;;
89|9[123]) case $SAMPLE_TYPE_IDS in
105) : nothing to do ;; # sets NO extension if it gets to this
*) EXTENSION="AGENTtrim_" ;;
esac ;;
esac ;;
esac ;;
esac
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/396796.html
