1

我有以下问题;两个目录包含:

  • dir1:文件列表,如下所示:

文件1.fq 文件2.fq 文件3.fq

等等..

  • dir2:文件列表,如下所示:

文件 1.fq.sa 文件 2.fq.sa 文件 3.fq.sa

我要做的是运行一个同时使用 file1.fq 和 file1.fq.sa 的命令。

我尝试了以下循环:

fq=dir1/*
sa=dir2/*

for fqfiles in $fq;

do

for sa_files in $sa;

do

mycommand ${sa_files} ${fqfiles} > ${sa_files}.cc &

done

done

问题是我的循环执行以下操作:

mycommand file1.fq.sa file1.fq > file1.fq.sa.cc  #correct

但是也

mycommand file1.fq.sa file2.fq > file1.fq.sa.cc  #wrong!

等等……在一个几乎无限的循环中!

我希望我的循环可以产生类似的东西:

mycommand file1.fq.sa file1.fq > file1.fq.sa.cc
mycommand file2.fq.sa file2.fq > file2.fq.sa.cc
mycommand file3.fq.sa file3.fq > file3.fq.sa.cc

ETC...

请你帮助我好吗?

谢谢!

法比奥

4

1 回答 1

1

您可以循环dir1,在文件上使用basename,然后添加前缀dir2并附加您需要的扩展名。您可能还想检查第二个目录中的文件并仅在两个文件都可用时运行您的命令

for f in dir1/*.fq; do
    b=$(basename "$f")
    f2=dir2/"$b".sa
    if test -f "$f2"; then
        mycommand "$f2" "$f" >"$b".sa.cc
    fi
done

如果您不想要目录部分,请改用这个

mycommand "$b".sa "$b" >"$b".sa.cc
于 2013-02-26T11:23:14.643 回答