如何调用由BASH中的程序执行的大型配对文件列表?

时间:2015-05-21 23:27:26

标签: linux bash dna-sequence

我有一个大型文件目录(100+),我希望通过终端传递一个程序。

文件已配对,并且都遵循如下命名方案:

 TS-8_S53_L001_R1_001.fastq 
 TS-8_S53_L001_R2_001.fastq
 RS-9_S54_L001_R1_001.fastq 
 RS-9_S54_L001_R2_001.fastq

程序执行如下:

Seqprogram -i1 Blah_R1_001.fastq -i2 Blah_R2_001.fastq -o Blah_paired.fastq

所有这些文件都在一个目录中。

我希望能够在所有文件上运行程序,使用按正确顺序配对的文件(R1文件通过i1传递,R1和R2文件具有相同的基本名称)和输出file(-o)保存在基本名称下,附加了一些标识符(“_paired”等)。

我已经设想过我如何通过Python做到这一点;但是,我正在努力改善BASH。

我很熟悉如何将多个文件调用到一个命令中;即,解压缩特定目录中的所有.gz文件

gunzip "*.gz"

但是这个命令有两个输入,输入必须是有序的,所以通配符方案是不够的。

由于

2 个答案:

答案 0 :(得分:3)

使用通配符获取该对的一个文件,然后使用参数替换来获取其他相应的文件名。

for i1 in *_R1_001.fastq; do
    i2=${i1/R1_001/R2_001}
    paired=${i1/R1_001/paired}
    Seqprogram -i1 "$i1" -i2 "$i2" -o "$paired"
done

答案 1 :(得分:0)

最简单的方法是匹配图案化的三个文件名中的一个,并修改它以获得另外两个。

也就是说:

for r1file in *_R1_*.fastq; do
  r2file=${r1file/_R1_/_R2_}
  pairfile=${r1file%_R1_*}_paired.fastq
  Seqprogram -i1 "$r1file" -i2 "$r2file" -o "$pairfile"
done