2017-08-16 19 views
1

由於我想在R中運行多個具有不同值的模擬,因此我建議在bash中使用作業數組。 1)我生成了參數組合,並將其保存在一個名爲parameters.txt的txt文件中。 2)我現在想要將每個參數組合用於R.每個組合都由一個由3個參數(3個參數)組成的行表示在parameters.txt中。陣列作業在bash中給出錯誤

當我運行我的腳本,出現錯誤消息:

頭:parameters.txt:行數量無效

頭:parameters.txt:線

頭數無效: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

看起來你的變量'SLURM_ARRAY_TASK_ID'沒有設置。 –

+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