bwa 示例的 bash 循环中的多个变量
Posted
技术标签:
【中文标题】bwa 示例的 bash 循环中的多个变量【英文标题】:multiple variables in bash loop for bwa sampe 【发布时间】:2019-11-25 04:17:05 【问题描述】:我正在尝试在 bwa 程序(bwa 样本)中处理具有匹配前缀和不同文件类型的多个输入文件,这是一般结构:
bwa sampe /Users/xxx/Desktop/Index_align/GRCh37_latest_genomic.fna H2_S16_L001_read1.sai H2_S16_L001_read2.sai \
H2_S16_L001_R1_001.fastq.gz H2_S16_L001_R2_001.fastq.gz > aln_H2_S16_L001.sam
我在当前目录中有所有 .sai 和 fastq.gz 文件,我正在尝试创建一个循环,如下所示:
for i in /Users/xxx/Desktop/Index_align/Fastq/fastq_run4/; do
bwa sampe /Users/xxx/Desktop/Index_align/GRCh37_latest_genomic.fna \
$i\-read1.sai $i\-read2.sai $i\-R1_001.fastq.gz $i\-R2_001.fastq.gz > $i\-aln.sam;
done
有人对我缺少的东西有什么建议吗?就像我可能需要创建一个前缀文件名列表?我将不胜感激任何建议。谢谢!
ETA:我尝试制作每个前缀文件的读取列表并运行:
for i in $(cat read1_list | sed s'/\-R1_001.fastq.gz//'); do
bwa sampe /Users/katherinenoble/Desktop/Index_align/GRCh37_latest_genomic.fna \
$i\-read1.sai $i\-read2.sai $i\-R1_001.fastq.gz $i\-R2_001.fastq.gz | samtools view -bS - > $i\.bam;
done
但这本质上只是制作完整文件标题前缀的文件。
【问题讨论】:
你的问题是什么?你有什么错误吗?你想达到什么目的? 谢谢,是的,它确实按照我写的方式抛出了一个错误。我正在尝试编写一个小循环来为多个文件执行 bwa sampe 命令(可以说是 A 到 Z)。由于它需要 A_read1.sai A_read2.sai A_R1.fastq.gz 和 A_r2.fastq.gz ,我想我需要先列出 A-Z?但基本上,我正在努力制作循环。并感谢您的回复! 【参考方案1】:您可以创建一个生成所需前缀的 for 循环。如果文件范围从H0_S00_L000
到H2_S16_L003
,您可以使用下面的循环。请注意,您必须检查每个文件是否真的存在。
for prefix in H0..9_S00..16_L000..003; do
echo $prefix;
done
如果您想使用以 4 个为一组的现有文件,您可以使用以下循环。它查找当前目录中的每个文件。前缀被定义为直到_fast
或_read
之前的所有内容。然后它对集合进行排序并删除双精度,如果没有找到其中的 4 个,则继续删除前缀。
while read -r prefix; do
echo $prefix;
done < <(find \
| sed -r 's/(.*)_(fast|read).*/\1/' \
| sort | uniq -c \
| sed -r 's/[ ]*4 (.*)$/\1/; /^ /d')
【讨论】:
以上是关于bwa 示例的 bash 循环中的多个变量的主要内容,如果未能解决你的问题,请参考以下文章