簡體   English   中英

如何使用第 1 列的每個唯一值創建一個 slurm 數組,並將第 2 列中的相應值用作 bash 腳本中的輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM