You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于表格唯一组创建Slurm数组并传递对应文件名

问题根源

你的脚本中GRP被赋值为空格分隔的字符串,而非Bash数组。当你用${GRP[$SLURM_ARRAY_TASK_ID]}访问时,实际上是取字符串的第N个字符(而非完整组名),导致后续awk匹配不到对应组,所以INPUT无输出。

修正方案

将GRP定义为Bash数组,确保每个元素对应一个唯一组名,这样索引访问就能拿到正确的组名:

#!/bin/bash
#SBATCH --array=0-2
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 1-

# 将唯一组名存入Bash数组
GRP=($(awk '{print $1}' table.txt | uniq))
# 打印所有组名(可选,用于验证)
echo "所有组: ${GRP[@]}"

# 根据数组任务ID获取对应组名
XYZ=${GRP[$SLURM_ARRAY_TASK_ID]}
echo "当前处理组: $XYZ"

# 提取对应组的文件名列表
INPUT=$(awk -v x="$XYZ" '$1 == x {print $2}' table.txt)
echo "对应文件: $INPUT"
优化建议(可选)

如果组的数量可能变化,避免手动修改--array范围,可以先计算组的数量再提交脚本:

  1. 先计算唯一组的数量:
NUM_GROUPS=$(awk '{print $1}' table.txt | uniq | wc -l)
  1. 动态指定数组范围提交:
sbatch --array=0-$((NUM_GROUPS-1)) your_script.sh

这样不管表格中有多少组,脚本都能自动适配数组任务数量。

内容的提问来源于stack exchange,提问作者user21058163

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:30:53