多个配对文件上的for循环

时间:2019-04-12 14:48:01

标签: bash

我有一组成对的结束文件,名为

D2_WT_mock1_1.fastq D2_WT_mock1_2.fastq
D2_KO_inf3_1.fastq  D2_KO_inf3_2.fastq
D6_KO_inf3_1.fastq  D6_KO_inf3_2.fastq

而且,我想执行一个需要同时输入以下内容的命令:

rule.py D2_WT_mock1_1.fastq D2_WT_mock1_2.fastq -o D2_WT_mock1

使用两个成对的结束文件作为输入的地方,并指出输出名称。

我尝试过

for f in *_1.fastq; do
command.py "$f" "${f%_1.fastq}_2.fastq" -o $f;
done

但是由于文件名的格式为

    File_something_something_1.fastq

如何确保每次使用正确的对应配对文件作为_1.fastq的输入?还有如何将输出仅命名为前缀术语,例如D2_WT_mock1,而不是像我的命令中那样命名整个文件名。

2 个答案:

答案 0 :(得分:0)

尝试一下:

while read line1; do
    while read line2; do
        echo -n "$line2 "
    done <<< $(ls -1 ${line1%_*}*)
    echo "-o ${line1%_*}"     
done <<< $(ls -1 *1.fastq) |\
while read line3; do
   echo "rule.py $line3"
done

输出

rule.py D2_KO_inf3_1.fastq D2_KO_inf3_2.fastq -o D2_KO_inf3
rule.py D2_WT_mock1_1.fastq D2_WT_mock1_2.fastq -o D2_WT_mock1
rule.py D6_KO_inf3_1.fastq D6_KO_inf3_2.fastq -o D6_KO_inf3

答案 1 :(得分:0)

for f in *_1.fastq; do
   command.py "$f" "${f/1.fastq/2.fastq}" -o "${f/_1.fastq}";
done