背景情報:私はProkka(生命情報学の初心者、Prokkaがなく、Bashの経験がほとんどありません)を実行しており、FASTAファイルがいくつかあります。
FASTAファイルを1つずつ入力できるBashループを作成する必要があると聞きました。
例:すべてのFASTA(.fna)ファイルを含むディレクトリの名前はStaphFNAで、その中に1000個のFASTAファイルがあります。すべてID番号に名前が付けられますが、通常のようにインクリメントされるのではなく(1、2、3などで番号付けされていない)ランダムジャンプがあります。たとえば、最初のものは34872、次は8933です。
最初のFASTAファイルをStaphFNAに入力してProkkaで処理し、「StaphProkka」というファイルに出力する必要があります。そして、第2のFASTAファイルも同じ処理を経て、再び「StaphProkka」に出力される。 1000個すべてが完了するまでこの方法を続けます。
想像できるように、この作業を1000回実行するのは少し難しいのでループをしたいのですが、私は初めてbashに触れて苦労しています。
私のProkkaの主張(私の考えにはこれが正しい):
prokka /Users/me/Documents/StaphFNA --outdir StaphProkka --prefix staph_aur --kingdom bacteria --locusting staphylococcus
私のForループ(これが間違っていることを知っています):
i = 0
for i in StaphFNA/.fna*; do
prokka /Users/me/Documents/StaphFNA/$i --outdir StaphProkka --prefix staph_aur --kingdom bacteria --locusting staphylococcus
i = i + 1
done
ベストアンサー1
出力ファイルを指定する必要がなく、prokkaが入力に応じて異なる名前のファイルを生成する場合、必要なものは次のとおりです。
for file in /Users/me/Documents/StaphFNA/*.fna; do
prokka "$file" \
--outdir StaphProkka \
--prefix staph_aur \
--kingdom bacteria \
--locusting staphylococcus
done
このfor variable in dir/*
パターンは各ファイルやディレクトリを繰り返し、対応dir/
するパス名を保存するため、$variable
カウンタなどは必要ありません。たとえば、処理file1.fa
などのカウンタを使用する必要があり、file2.fa
処理を望まない場合は、otherfile.fa
次のようにすることができます(周囲にスペースがないことに注意してください。=
重要です)。
for ((i=0; i<=10; i++)); do
someCommand "file${i}.fa"
done
または、明示的にカウンタを増やす必要がある場合(まれな場合)、次のことを実行できます。
i=0
while [ "$i" -le 10 ]; do
echo someCommand "file${i}.fa"
(( i++ ))
done