複数のディレクトリでJellyfishファイルを複数実行するようにbashスクリプトを改善するのに役立ちます。

複数のディレクトリでJellyfishファイルを複数実行するようにbashスクリプトを改善するのに役立ちます。

次のディレクトリツリーがあります。

Data/bacteria_splitted/GeneraName/chromosomes/*.fna.gz

ここで、 *fna.gz は圧縮された fasta ファイルです。

>header
string sequence

各GeneraName / chromosomesディレクトリには1〜1500個のgzip fastaファイルがあり、これらのディレクトリのデータに対してJellyfishというツールを実行したい/必要です(入力fastaファイルからサブワード/ n-grams / kmersの数を計算する) /バクテリア_分割/属名/染色体')。

結果(mer_counts.jf)

Results/GeneraName/chromosomes/kmers3(if i am count words with length 3)

しかし、クラゲはgzipファイルでは機能しません。その後、ファイルを解凍してクラゲにパイプする必要があります。マニュアルには発電機を使用できると記載されています。

「複数のファイルを一度に読み取る方法は?多くのスレッドが部分的に使用されなくなります。ゼリーフィッシュに指示することができます。

jellyfish count -F 2 <(fastq-dump -Z file1.sra) <(fastq-dump -Z file2.sra) ...

別の方法は、「発電機」を使用することです。まず、シーケンスを生成するために1行に1つのコマンドを含むファイルを作成します。その後、このファイルはクラゲと同時に実行されるジェネレータの数に渡されます。 Jellyfishは渡されたコマンドを実行し、シーケンスのための標準出力を読み取る子プロセスを生成します。デフォルトでは、コマンドは-Sスイッチで変更できるSHELL環境変数のシェルを使用して実行されます。 -Gスイッチで指定されているように、複数のジェネレータが同時に実行されます。たとえば、

ls *.fasta.gz | xargs -n 1 echo gunzip -c > generators
jellyfish count -g generators -G 4 ...

最初のコマンドは "generators"ファイルにコマンドリストを生成し、各コマンドは現在のディレクトリにFASTAファイルを解凍します。 2番目のコマンドは、4つの同時ジェネレータを使用してクラゲを実行します。 」

ジェネレータは次のファイルです。

gunzip -c NC_009484.1_Acidiphilium_cryptum_JF_5_complete_genome.fna.gz
gunzip -c NC_015186.1_Acidiphilium_multivorum_AIU301_complete_genome.fna.gz

私は次のようなものを得ます:

#!usr/bin/env bash

echo "Counting k-mers with JellyFish"

input='teste_name.txt'

while IFS= read -r line
do
  echo "Counting kmers in $line genomes"
  ls test/$line/chromosomes/*.fna.gz | xargs -n 1 echo gunzip -c > generators
  jellyfish count -g generators -m 4 -s 100M -o $line'_4'.jf 
done < "$input"

しかし、各属ごとに異なる数のos fastaファイルを読み取るので、これを改善する必要があります。私が必要とするすべてを計算しないでください。現在のカウントが以前のカウントを上書きするためです。この問題を解決する方法はありますか?私はbashの経験があまりないので...どんな助けでもいいでしょう。ありがとうございます。ポール

関連情報