[英]How to create a slurm array with each unique values of column 1 and use the corresponsing values in column 2 as inputs in a bash script
從表中,我試圖將對應於每個唯一組(第 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
=================================
所需的 output 這里是數組的每個作業中的兩個文件的列表。 例子:
a.txt
b.txt
問題:使用變量 $XYZ 作為模式不會為 $INPUT 返回任何值,而 $GRP 和 $XYZ 有效。 如果我使用 $GRP 而不是 $XYZ 作為 $INPUT 中的變量,並且在第 1 列中只有一個唯一值,如下所示,它可以工作。
$cat table.txt
group1 a.txt
group1 b.txt
這里的output是a.txt b.txt
如果有人可以幫助在陣列中的個人工作中為每個組獲得類似的 output,我會很感激。
要使 GRP 成為數組,您應該將賦值的右側括在括號中,因此:
GRP=(`awk '{print $1}' table.txt | uniq`)
您所做的只是將 GRP 創建為普通變量,因此${GRP[0]}
是整個字符串,所有其他索引將返回空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.