在配对文件上执行命令,然后重命名输出

时间:2014-10-29 19:35:19

标签: bash unix fastq

command.py,将两个配对文件CA01_S1_R1.fastqCA01_S1_R2.fastq合并在一起。然后,它将结果打印到新目录paired.out中,并将结果文件命名为paired.fastq。完整的命令将读取

command.py -f CA01_S1_R1.fastq -r CA01_S1_R2.fastq -o paired.out

但是,我想在许多文件上执行此命令,然后将所有输出保存到同一目录中。此外,输出需要具有唯一的名称。所以,我也想发送文件2和3,也有效地运行这些命令:

command.py -f CA02_S2_R1.fastq -r CA02_S2_R2.fastq -o paired.out

command.py -f CA03_S3_R1.fastq -r CA03_S3_R2.fastq -o paired.out

但是,即使我有代码在所有样本上循环此命令,该命令仍会覆盖最后一个配对的输出,因为所有输出都保存在文件夹paired.out内,文件名为{{ 1}}。是否有一个我可以编写的简单循环,它将通过命令发送每个文件对,然后输入文件夹并将文件输出从paired.fastq重命名为paired.fastq,然后重复我的所有文件?

我知道我可以使用以下命令通过命令发送多个文件:

CA01_paired.fastq

我想在此循环中添加第二条指令,只需cd进入此文件夹,然后重命名该文件,每次递增1。我不知道如何设置增量变量。我想它看起来像这样:

for f in CA*_S*_R1.fastq; do
# Replace R1 with R2 in the filename and run the command on both files.
command.py -f "$f" -r "${f/R1/R2}" -o paired.ends
done; unset -v f

1 个答案:

答案 0 :(得分:1)

假设文件已通过blah_R1.fastqblah_R2.fastq配对:

for f in *_R1.fastq; do
    r=${f/_R1/_R2}
    command.py -f "$f" -r "$r" -o paired.out &&
        mv paired.out/paired.fastq paired.out/"${f%%_*}_paired.fastq"
done