1

私は次の問題を抱えています。以下を含む2つのディレクトリ:

  • dir1:次のようなファイルのリスト:

file1.fq file2.fq file3.fq

等々..

  • dir2:次のようなファイルのリスト:

file1.fq.sa file2.fq.sa file3.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

等...

手伝っていただけませんか?

ありがとうございました!

ファビオ

4

1 に答える 1

1

をループしてファイルdir1で使用し、必要な拡張子を前に付けて追加することができます。2 番目のディレクトリ内のファイルを確認し、両方のファイルが利用可能な場合にのみコマンドを実行することもできます。basenamedir2

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 に答える