Ошибка: слишком много позиционных аргументов (1) при использовании BLAST без цикла для цикла - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь написать сценарий, который будет проходить через все каталоги в каталоге, где он будет запрашивать определенную последовательность в локальной базе данных Blast.Я запустил поиск BLAST без цикла для bash и использовал цикл for для создания баз данных.Я перепробовал все, что предлагали другие, имеющие эту проблему (где применимо), но безрезультатно.Я ничего не копирую и не вставляю, я перепечатал скрипт и искал глупые ошибки (которых я делаю много).Может я просто этого не вижу?В любом случае вот код:

SRV01:~$ for d in ~/data/Shen_transcriptomes/transcriptomes/*/; do tblastn -query ~/data/chitin_binding_protein/cbp_Tectaria_macrodonta.fa -db "$d"*BLASTdb* -out "$(basename "$d")".out; done

Когда я запускаю то же самое с: echo "$d"*BLASTdb*, он возвращает правильные файлы.Таким образом, цикл for работает, но приведенный выше скрипт возвращает:

Error: Too many positional arguments (1), the offending value: /home/dwickell/data/Shen_transcriptomes/transcriptomes/Acrostichum_aureum_RS90/RS_90_BLASTdb.nin

для каждого файла BLASTdb в каталоге.

-edit-

Так что это работает, но я недостаточно разбираюсь в bash, чтобы понять, почему:

SRV01:~/data$ for d in /home/dwickell/data/Shen_transcriptome/transcriptomes/*/*.nin; do 
    name=$(echo "$d" | cut -f 1 -d '.')
    blastn -query ./chitin_binding_protein/cbp_Tectaria_macrodonta.fa -db "$name" -outfmt 6 -out RS_103_tblastn.out; done

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Хорошо, как я уже упоминал в редактировании моего вопроса выше. Кажется, я нашел решение:

for d in /home/dwickell/data/Shen_transcriptomes/transcriptomes/*/*.nin; do 
    name=$(echo "$d" | cut -f 1 -d '.')
    blastn -query ./chitin_binding_protein/cbp_Tectaria_macrodonta.fa -db "$name" -outfmt 6 -out "$(basename "$d" .nin)".out; done

Мне не понятно, почему это работает, но работает. Возможно, это как-то связано со звездочкой в ​​моей предыдущей попытке? Если кто-то может уточнить, пожалуйста, сделайте! Однако для моих собственных целей я считаю, что это решено.

Спасибо всем за комментарии.

0 голосов
/ 12 сентября 2018

Бьюсь об заклад, у вас есть каталог с более чем одним совпадающим файлом BLAST. Попробуйте этот тест:

for d in ~/data/Shen_transcriptomes/transcriptomes/*/; do
  echo "For directory $d have:"
  ls -1 "$d"*BLASTdb*
  echo
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...