在一个表中,我尝试将与每个唯一组(第1列)对应的文件名(第2列)作为输入传递到一个使用唯一的第1列变量创建的slurm数组中。
样表:
$cat table.txt
group1 a.txt
group1 b.txt
group2 c.txt
group2 d.txt
group3 e.txt
group3 f.txt
================================
#!/bin/bash
#SBATCH --array=0-2
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 1-
GRP=`awk '{print $1}' table.txt | uniq`
echo $GRP
XYZ=${GRP[$SLURM_ARRAY_TASK_ID]}
echo $XYZ
INPUT=`awk -v x="$XYZ" '$1 == x {print $2}' table.txt`
echo $INPUT
=================================
此处所需的输出是阵列的每个作业中包含两个文件的列表。例如:
a.txt
b.txt
问题:使用变量$XYZ作为模式不会为$INPUT返回任何值,而使用$GRP和$XYZ可以。如果我使用$GRP而不是$XYZ作为$INPUT中的变量,并且在列1中只有一个唯一值,如下所示,它可以工作。
$cat table.txt
group1 a.txt
group1 b.txt
此处的输出为a.txt b.txt
我将appriciate如果有人可以帮助获得类似的输出,为每一组在individual工作的阵列。
1条答案
按热度按时间0md85ypi1#
要使GRP成为一个数组,您应该将赋值语句的右边括在括号中,因此:
您所做的只是将GRP创建为一个普通变量,因此
${GRP[0]}
是整个字符串,所有其他索引将返回空。