Erro ao forçar um loop for?

1

Em uma casca bifurcada, estou tentando executar um código que recebe dois arquivos de entrada e gera quatro arquivos. Aqui está um exemplo do que eu estou tentando executar dentro do loop for - ele produz os resultados que eu espero:

sudo java -jar ~/Trimmomatic-0.36/trimmomatic-0.36.jar PE -phred33 \
my_dir/sample_1/77504_S11_L003_R1_001.fastq.gz \
my_dir/sample_1/77504_S11_L003_R2_001.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE1_001_Adapter_Removed.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE1_001_Adapter_Removed_U.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE2_001_Adapter_Removed.fastq.gz \
my_dir/sample_1/776504_S11_L003_PE2_001_Adapter_Removed_U.fastq.gz \
ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 \
LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

Embora todos os meus arquivos de entrada estejam no mesmo diretório e cada par de entradas esteja no mesmo subdiretório, não há dois pares separados de entrada dentro do mesmo subdiretório, por exemplo,

Pair 1:
my_dir/sample_1/77504_S11_L003_R1_001.fastq.gz
my_dir/sample_1/77504_S11_L003_R2_001.fastq.gz

Pair 2:
my_dir/sample_2/77505_S11_L003_R1_001.fastq.gz
my_dir/sample_2/77505_S11_L003_R2_001.fastq.gz

Eu preciso executar meu código no primeiro bloco em relação a ~ 50 arquivos. Veja o que eu tenho até agora, mas sei que não está correto, porque o código não está encontrando o adaptador

ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10

Mais uma vez, esta linha funciona bem no primeiro bloco de código que postei.

AdapterQCTrim () {
# Make base1
base=$(basename $filename .fastq.gz)
echo $base

# Make base2
baseR2=${base/_R1_/_R2_}
echo $baseR2

# Run Trimmomatic
sudo java -jar ~/Trimmomatic-0.36/trimmomatic-0.36.jar PE -phred33 \
${base}.fastq.gz \
${baseR2}.fastq.gz \
${base}.qc.fq.gz \
s1_UP \
${baseR2}.qc.fq.gz \
s2_UP \
ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 \
LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

# Save
gzip -11c s1_UP s2_PE >> paired.qc.fq.gz
gzip -11c s1_UP s2_UP >> orphans.qc.fq.gz
}

for filename in *_R1_*.fastq.gz; do AdapterQCTrim & done

Se houver uma maneira de simplificar isso, estou aberto a outras ideias.

    
por user238529 30.06.2017 / 18:29

1 resposta

0

Seu código parece bem, mas para uma linha.

for filename in *_R1_*.fastq.gz; do AdapterQCTrim & done

Aqui *_R1_* não se expandirá para o que você espera. Conforme você escreve, os pares estão em diretórios separados, portanto, para aplicar a função para as subpastas, você precisa de */_R1_*.fastq.gz na estrutura for . Observe a barra. Você deve executar isso no local que contém as subpastas. Você pode ter certeza de que isso está ocorrendo colocando antes do loop for algo assim:

cd theRightDirectory || exit 1

for não é bifurcado. É executado no processo principal.

    
por 01.07.2017 / 12:14