gpt4 book ai didi

linux - 如何在一个 SGE shell 脚本中合并两个任务数组

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:58 24 4
gpt4 key购买 nike

我正在尝试编写用于 Sun Grid Engine 的 shell 脚本。我希望能够将两个任务数组合并到脚本中。一个是文件名列表,另一个是数字(指1到22号染色体)。如果我要在循环中写这个,我会这样做(例如):

readarray -t QTL < QTL_file_list.txt
for i in ${QTL[@]}
do for j in {1..22}
do echo '"$i"_"$j"'
done
done

但是,我希望能够将其作为一个数组来执行。我尝试过的是:

#!/bin/bash -e
#$ -cwd
#$ -pe smp 1-8
#$ -l h_vmem=4G
#$ -N extract_QTL_SNPs
#$ -j y
#$ -t 1-22

# read list of QTL files into an array
readarray -t QTL < QTL_file_list.txt

plink2 --dosage chr${SGE_TASK_ID}.out.dosage.gz --map chr${SGE_TASK_ID}.map --extract ${QTL[$SGE_TASK_ID-1]}SNPlist.txt --write-dosage --out ${QTL[$SGE_TASK_ID-1]}chr${SGE_TASK_ID}_tmp

它成功地合并了 QTL 数组中的每个元素(例如 RegionA、RegionB、RegionC、RegionD、RegionE),但只为每个 QTL 元素输出一个染色体元素,例如

RegionA_chr1_tmp
RegionB_chr2_tmp
RegionC_chr3_tmp
RegionD_chr4_tmp
RegionE_chr5_tmp

有没有办法将两个数组合并到一个脚本中,以便为每个 QTL 元素生成 22 个文件?

提前致谢! :)

最佳答案

根据您的要求,为每个区域生成 22 个文件,运行两个循环,一个用于 QTL 阵列,一个在内部用于迭代最多 22

#!/usr/bin/env bash

readarray -t qtlArray < QTL_file_list.txt
# Assuming qtlArray contains RegionA, RegionB upto E

# Now iterating over the qtlArray, you don't need to loop over
# indices ${arr[idx]} but just do as

for qtlElement in "${qtlArray[@]}"; do
for iterator in {1..22}; do
plink2 --dosage chr"${iterator}".out.dosage.gz \
--map chr"${iterator}".map \
--extract "${qtlElement}"SNPlist.txt \
--write-dosage --out "${qtlElement}"chr"${iterator}"_tmp
done
done

关于linux - 如何在一个 SGE shell 脚本中合并两个任务数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48526162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com