如何调用 BASH 中的程序执行的大量配对文件?
How to call a large list of paired files to be executed by a program in BASH?
我有一个很大的文件目录 (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 文件具有相同的基本名称)和输出文件(-o)保存在基本名称下并附有一些标识符(“_paired”等)。
我已经设想过我将如何做到这一点 Python;但是,我正在努力通过 BASH.
变得更好
我很熟悉如何将多个文件调用到一个命令中;即解压缩特定目录中的所有 .gz 文件
gunzip "*.gz"
但是这个命令有两个输入,并且输入必须排序,所以通配符方案是不够的。
谢谢
最简单的方法是匹配三个模式化文件名中的一个,然后修改它以获得另外两个。
也就是说:
for r1file in *_R1_*.fastq; do
r2file=${r1file/_R1_/_R2_}
pairfile=${r1file%_R1_*}_paired.fastq
Seqprogram -i1 "$r1file" -i2 "$r2file" -o "$pairfile"
done
使用通配符获取一对文件中的一个,然后使用参数替换获取其他对应的文件名。
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
我有一个很大的文件目录 (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 文件具有相同的基本名称)和输出文件(-o)保存在基本名称下并附有一些标识符(“_paired”等)。
我已经设想过我将如何做到这一点 Python;但是,我正在努力通过 BASH.
变得更好我很熟悉如何将多个文件调用到一个命令中;即解压缩特定目录中的所有 .gz 文件
gunzip "*.gz"
但是这个命令有两个输入,并且输入必须排序,所以通配符方案是不够的。
谢谢
最简单的方法是匹配三个模式化文件名中的一个,然后修改它以获得另外两个。
也就是说:
for r1file in *_R1_*.fastq; do
r2file=${r1file/_R1_/_R2_}
pairfile=${r1file%_R1_*}_paired.fastq
Seqprogram -i1 "$r1file" -i2 "$r2file" -o "$pairfile"
done
使用通配符获取一对文件中的一个,然后使用参数替换获取其他对应的文件名。
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