여러 디렉터리에서 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 수 계산)('Data/ 박테리아_분할/속명/염색체').

결과(mer_counts.jf)를

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

하지만 해파리는 gzip 파일에서 작동하지 않습니다. 그러면 파일의 압축을 풀고 해파리로 파이프해야 합니다. 매뉴얼에는 발전기를 사용할 수 있다고 나와 있습니다.

"여러 파일을 한 번에 읽는 방법은 무엇입니까? 일반적으로 젤리피시는 gzip이나 fastq-dump(SRA 파일을 구문 분석하는 데 사용됨) 출력 시퀀스보다 입력 시퀀스 파일을 더 빠르게 구문 분석합니다. 이로 인해 해파리의 많은 스레드가 부분적으로 사용되지 않게 됩니다. 젤리피쉬에게 지시할 수 있습니다. 예를 들어 두 개의 짧은 읽기 아카이브 파일을 동시에 읽으려면 여러 파일을 동시에 열 수 있습니다.

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

또 다른 방법은 "발전기"를 사용하는 것입니다. 먼저 시퀀스를 생성하기 위해 한 줄에 하나의 명령이 포함된 파일을 만듭니다. 그런 다음 이 파일은 해파리와 동시에 실행될 생성기 수에 전달됩니다. Jellyfish는 전달된 명령을 실행하고 시퀀싱을 위해 표준 출력을 읽는 하위 프로세스를 생성합니다. 기본적으로 명령은 -S 스위치로 변경할 수 있는 SHELL 환경 변수의 셸을 사용하여 실행됩니다. -G 스위치에 지정된 대로 여러 생성기가 동시에 실행됩니다. 예를 들어:

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

첫 번째 명령은 "generators" 파일에 명령 목록을 생성하며, 각 명령은 현재 디렉터리에 FASTA 파일의 압축을 풉니다. 두 번째 명령은 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 파일을 읽을 것이기 때문에 이를 개선해야 하며, 제가 이해한 바에 따르면 생성기를 사용하는 경우 프로세서의 세대 수를 예측할 수 있다면 속별로 1개의 fasta 파일만 계산할 것입니다. 내가 필요한 모든 것을 계산하지 마세요. 현재 카운트가 이전 카운트를 덮어쓰게 되기 때문입니다. 이 문제를 해결할 수 있는 방법이 있나요? 나는 bash에 대한 경험이 많지 않으므로 ... 어떤 도움이라도 좋을 것입니다. 감사해요. 폴

관련 정보