2017-03-16 19 views
0

我有一個主腳本用標準SLURM提交像這樣提交的腳本:命令輸出到變量中SLURM提交的正確轉義

    cat > $jobfile <<EOF 
    #!/bin/bash 
    # auto-generated job file 
    # generated from $PWD/$0 
    # on ${DATE} 
    #SBATCH --job-name=PAINTOR_${UIDN}_${ETH}_JOB 
    #SBATCH --ntasks=1       ##Number of PROCESSES 
    #SBATCH --cpus-per-task=1     ##Number of PROCESSES 
    #SBATCH --mem-per-cpu=5000     ##Memory specified for each core used (in MB) (no cores, use --mem=) 
    #SBATCH -t 2-02:00:00      ##Runtime in D-HH:MM:SS 
    #SBATCH --share 
    #SBATCH --partition=medium     ## express(2h), short(12h), medium(2d2h), long(6d6h), interactive(2h) 
    # 
    #SBATCH --mail-user=${USER}@uab.edu 
    #SBATCH --mail-type=ALL      ## BEGIN, END, ERROR, ALL 
    # 
    #SBATCH --error=${LOG_DIR}/%j.%N.err.txt    ##File to which STDERR will be written 
    #SBATCH --output=${LOG_DIR}/%j.%N.out.txt    ## File to which STDOUT will be written 

在運行中,主腳本的此部分

LNGTH=`awk '{print NF}' ${TARG}/${UIDN}.annotations | tail -1` 
     for NUM in \$(eval "echo {1..\$LNGTH}"); do 
       ANNOT_COL=`head -1 ${TARG}/${UIDN}.annotations | awk -v NUM=\$NUM '{print \$NUM}'` 
       if [ ! -f ${TEMP_DIR}/${UIDN}/Gname.Enrich.\$ANNOT_COL ]; then 
         $PAINTOR -input ${TARG}/input.files \ 
-Zhead ZSCORE.AFR,ZSCORE.EAS,ZSCORE.AFR \ 
-LDname AFR.LD,EAS.LD,EUR.LD \ 
-in ${TARG}/ \ 
-out $TEMP_DIR/${UIDN}/ \ 
-enumerate 2 \ 
-annotations \$ANNOT_COL \ 
-Gname Gname.Enrich.\$ANNOT_COL \ 
-Lname Lname.BF.\$ANNOT_COL 
       fi 
     done 

打印從腳本:

LNGTH=8134 
    for NUM in $(eval "echo {1..$LNGTH}"); do 
      ANNOT_COL=E001_15_coreMarks_mnemonics.bed.10_TssBiv.ES-I3_Cell_Line E001_15_coreMarks_mnemonics.bed.11_BivFlnk.ES-I3_Cell_Line E001_15_coreMarks_mnemonics.bed.12_EnhBiv.ES-I3_$ 
      if [ ! -f /data/scratch/vlaufer/PAINTOR3/temp/CLEAR_Okada_21_43755067_43955067/Gname.Enrich.$ANNOT_COL ]; then 
        /data/scratch/vlaufer/PAINTOR3/PAINTOR_V3.0/PAINTOR -input /data/scratch/vlaufer/PAINTOR3/Prepped_Input_Files/CLEAR_Okada_21_43755067_43955067/input.files -Zhead ZSCOR$ 
      fi 
    done 

這在很大程度上似乎工作,我相信李ne失敗的是包含ANNOT_COL=的行。此行只應打印對應於列值爲$NUM的列的註釋(即,如果$NUM爲10,則應打印文件${TARG}/${UIDN}.annotations第一行的第10列,而不是所有列)。特別容易混淆的部分對我來說就是LNGTH=線似乎工作,並具有非常相似的語法。

我懷疑問題是逃逸字符,但我不知道。

+0

您可能會發現'GNU parallel'工具是您整個腳本的簡單替代工具。 https://www.gnu.org/software/parallel/ – damienfrancois

+0

感謝您的建議,但我進行分析的計算機集羣不提供這樣的解決方案。 –

回答

0

我重新設計有問題的部分,現在是:

read -a ANNOT < ${TARG}/${UIDN}.annotations 
for ANNOT_COL in "\${ANNOT[@]}"; do 
     if [ ! -f ${TEMP_DIR}/${UIDN}/Gname.Enrich.\$ANNOT_COL ]; then 
       echo "now generating marginal distribution for \$ANNOT_COL" 
       $PAINTOR -input ${TARG}/input.files \\ 

LNGTHNUM變量已被刪除,該腳本現在直接遍歷${TARG}/${UIDN}.annotations文件的標題。

相關問題