数组作业在bash中出错

时间:2017-08-16 08:40:25

标签: arrays bash

由于我想在R中运行多个具有不同值的模拟,我建议在bash中使用作业数组。 1)我生成了参数组合并将其保存在一个名为parameters.txt的txt文件中。 2)我现在想要将每个参数组合用于R.每个组合由parameters.txt中的3个数字(3个参数)组成。

当我运行脚本时,会出现一条错误消息:

  

head:parameters.txt:行数无效

     

head:parameters.txt:行数无效

     

head:parameters.txt:行数无效

     

作业数组项:rx =,ry =,rz =

这是我的剧本:

# Sweeping parameters.txt
N=${SLURM_ARRAY_TASK_ID}
rx=`head -n ${N} parameters.txt | tail -n 1 | cut -d' ' -f1`
ry=`head -n ${N} parameters.txt | tail -n 1 | cut -d' ' -f2`
rz=`head -n ${N} parameters.txt | tail -n 1 | cut -d' ' -f3`

# Display
echo "Job array item $N: rx=$rx, ry=$ry, rz=$rz"
echo "---------------------------------"

# Run
R CMD BATCH ex.R $rx $ry $rz

1 个答案:

答案 0 :(得分:0)

似乎SLURM_ARRAY_TASK_IDNone (not set),结果NNone

N=${SLURM_ARRAY_TASK_ID}

然后bash将其翻译为

rx=`head -n parameters.txt ...

您可以使用if语句进行换行,如下所示:

N=${SLURM_ARRAY_TASK_ID}
if [ -n "${N}" ]; then
    rx=`head -n ${N} parameters.txt | tail -n 1 | cut -d' ' -f1`
    ry=`head -n ${N} parameters.txt | tail -n 1 | cut -d' ' -f2`
    rz=`head -n ${N} parameters.txt | tail -n 1 | cut -d' ' -f3`

    # Display
    echo "Job array item $N: rx=$rx, ry=$ry, rz=$rz"
    echo "---------------------------------"

    # Run
    R CMD BATCH ex.R $rx $ry $rz
else
    echo "SLURM_ARRAY_TASK_ID / N is None"
fi