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_L000H2_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 循环中的多个变量的主要内容,如果未能解决你的问题,请参考以下文章

循环变量定义 R

linux bash shell中for的用法and示例

python 语法(空行变量if条件控制循环语句)编码示例

python 语法(空行变量if条件控制循环语句)编码示例

python 语法(空行变量if条件控制循环语句)编码示例

bash颜色变量数组相关脚本示例