我有一个主脚本,它使用标准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其中大部分似乎是有效的,我相信失败的行是包含ANNOT_COL=的行。该行应仅打印与值等于$NUM的列对应的注释(即,如果$NUM为10,则应打印文件${TARG}/${UIDN}.annotations的第一行的第10列,而不是所有列。让我特别困惑的是,LNGTH=行似乎可以工作,并且具有非常相似的语法。
我怀疑问题出在转义字符上,但我不确定。
发布于 2017-03-17 09:36:29
我修改了有问题的部分,现在是:
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 \\LNGTH和NUM变量已被删除,该脚本现在直接迭代${TARG}/${UIDN}.annotations文件头。
https://stackoverflow.com/questions/42823680
复制相似问题