我有一个大型文件目录(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"
但是这个命令有两个输入,输入必须是有序的,所以通配符方案是不够的。
由于
答案 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