我正在尝试编写一个用于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个文件?
提前致谢! :)
答案 0 :(得分:1)
根据您的要求,为每个区域生成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