如何通过多个文件在Linux迭代代码?(How to code for iterating thro

2019-09-27 04:36发布

我有我试图从另一个例子更新代码。 其目的是用PLINK的文件运行:每个染色体,SNP ID和仅含有1 ID,其是个人ID的文件。 跑在砰砰这些文件最终使每一个个体的vcf文件特定染色体。

我有22页染色体的文件,1个SNP文件(这始终是一样的),和500个个人文件。 对于每一个人我的目标,使每个染色体VCF,所以我有22 * 500(11000)VCF文件作为输出。

随着此刻做这个我也试了bash脚本这一点:

ID=$SGE_TASK_ID
indiv=$SGE_TASK_ID

plink --bed chr${ID}.bed --bim chr${ID}.bim --fam chr${ID}.fam --extract snps.txt
--recode vcf-iid --out output${indiv}chr${ID}vcf --keep-fam individual${indiv}.txt

这将运行,但它只能通过1个单一运行,给我22个染色体长臂的vcf文件,一个人,并停止在那里。 如何使这个运行的所有500人,这将是一个for循环? 通过我一直没能找到适合我的问题,是在linux一个其他问题来看,任何帮助将不胜感激。

$ {}逐张也只是一个数字,使运行文本文件看起来像individual1.txt并增加通过的500人(individual1.txt,individual2.txt,individual3.txt)

Answer 1:

假设${indiv}不包含空格,

for indiv in $(<individuals.data); do
    plink [...] individual${indiv}.txt
done

该文件individuals.data会说出个人,用空格或换行分隔。

如果不确定Bash shell中的什么$(<...)运营商做,试试这个:

for A in $(<individuals.data); do
    echo "[$A]"
done

需要注意的是,作为@Kaz已经观察到,如果希望你的脚本比其他的Bash炮弹还要工作,那么你可以写$(cat ...)而不是$(<...)



文章来源: How to code for iterating through multiple files in linux?
标签: linux bash