Problema se existe um diretório

0

Eu tenho o seguinte código:

#!/bin/bash

while read line
do
echo "line" $line
if [[ -d ../Results/${line}_Forward && -d ../Results/${line}_Reverse ]]
then

        cd ../Results/COMBI
        mkdir ./${line}_COMBI
        cd ..
        for (( win = 2; win < 20; win += 2 )); do
        printf 'The value of win is %d, now entereing inner loop\n' "$win"

        for (( per = 50; per < 100; per += 2 )); do
            printf 'Value of per is %d\n' "$per"
            merger -asequence ./${line}_Forward/${line}_Forward_Trimmed_w${win}_p${per}.fa -bsequence ./${line}_Reverse/REV_COMP/${line}_Reverse_Trimmed_w${win}_p${per}_RevComp.fa -outseq ./COMBI/${line}_COMBI/${line}_w${win}_p${per}_COMBI.fa
        done
        done
else
    echo $line "Forward or Reverse directory does not exist"
fi
done < ./Data_ORD.txt

Quando eu executo o script, qualquer ditame contido na instrução if sai, mas é verdade. E eu recebo esse tipo de saída para cada linha no Data_ORD.txt:

line  ORD0926
 Forward or Reverse directory does not exist

na última variável echo $ line não é impresso. Eu acho que algo está errado com essa variável, mas com a instrução if.

Alguma idéia é por que $ linha não é impressa no último eco e diretórios não são reconhecidos pela instrução if?

**. fa: formatos fasta que são formatos de texto simples contendo sequências de DNA. ** comando de fusão: contido no pacote EMBOSS "The European Molecular Biology Open Software Suite"

    
por Neuls 15.01.2017 / 13:49

1 resposta

0

Estou verificando se os dois diretórios existem. Eu criei uma nova variável depois que reduz os códigos contidos no arquivo de dados: wth = echo $ {line} | corte -c 1-7

#!/bin/bash

while read line
do
echo "line" $line
wth='echo ${line} |  cut -c 1-7'
echo "wth" ${wth}
if [[ -d ../Results/${wth}_Forward && -d ../Results/${wth}_Reverse ]]
then

        cd ../Results/COMBI
        mkdir ./${wth}_COMBI
        cd ..
        for (( win = 2; win < 20; win += 2 )); do
        printf 'The value of win is %d, now entereing inner loop\n' "$win"

        for (( per = 50; per < 100; per += 2 )); do
            printf 'Value of per is %d\n' "$per"
            merger -asequence ./${wth}_Forward/${wth}_Forward_Trimmed_w${win}_p${per}.fa -bsequence ./${wth}_Reverse/REV_COMP/${wth}_Reverse_w${win}_p${per}_RevComp.fa -outfile none -outseq ./COMBI/${wth}_COMBI/${wth}_w${win}_p${per}_COMBI.fa
        done
        done
else
    echo ${wth} "Forward or Reverse directory does not exist"
fi
done < ./Data_ORD.txt

Agora o script funciona. Parece que chamar diretamente $ line como uma variável não é uma boa ideia, pois pode haver alguns espaços invisíveis.

    
por 15.01.2017 / 14:30