У меня есть следующий код:
#!/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
Когда я запускаю скрипт, любой запрос, содержащийся в статусе if, завершается, но на самом деле это происходит. И я получаю такой вывод для каждой строки в Data_ORD.txt:
line ORD0926
Forward or Reverse directory does not exist
в последнем echo
$ line переменная не печатается. Я предполагаю, что что-то не так с этой переменной, но или с оператором if.
Любая идея, почему $ line не печатается в последнем эхо, а каталоги не распознаются оператором if?
**. Fa: fasta форматы, которые представляют собой простые текстовые форматы, содержащие последовательности ДНК. ** команда слияния: содержится в пакете EMBOSS «Открытый программный пакет для европейской молекулярной биологии»
Я проверяю, существуют ли оба каталога. После этого я создал новую переменную, которая вырезает коды, содержащиеся в файле данных: wth = echo $ {line} | cut -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
Теперь скрипт работает. Кажется, что прямой вызов $ line в качестве переменной - не лучшая идея, поскольку могут быть некоторые невидимые пробелы.