Получение согласованного файла фесты

Если Вы имеете socat удобный, существует этот пример в руководстве, которое Вы могли использовать.

   (sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
   socat - EXEC:'ssh -l user server',pty,setsid,ctty

          EXEC’utes an ssh session to server. Uses a pty for communication
          between socat and ssh, makes it ssh’s controlling tty
          (ctty), and makes this pty the owner of a new process group 
          (setsid), so ssh accepts the password from socat.
2
31.05.2017, 14:28
1 ответ

Простой случай, который вы показываете, тривиален. Ваши последовательности никогда не могут быть больше одной строки, поэтому вы можете просто использовать grep для поиска каждого из ваших идентификаторов и строки после них:

grep -Fwf list.txt -A 1  seq.fasta | grep -v '^--$'  > out.fasta

grep -v '^ - $' просто отфильтровывает строки с помощью - , которые grep добавляет между группами строк вывода при использовании параметра -A .

Чтобы также избежать дублирования, вы можете передать свой список через (GNU) sort:

grep -Fwf <(sort -u list.txt) -A 1  seq.fasta | grep -v '^--$'  > out.fasta

Используемые флаги:

   -f FILE, --file=FILE
          Obtain  patterns  from  FILE,  one  per  line.   The  empty file
          contains zero patterns, and therefore matches nothing.   (-f  is
          specified by POSIX.)
   -w, --word-regexp
          Select  only  those  lines  containing  matches  that form whole
          words.  The test is that the matching substring must  either  be
          at  the  beginning  of  the  line,  or  preceded  by  a non-word
          constituent character.  Similarly, it must be either at the  end
          of  the  line  or  followed by a non-word constituent character.
          Word-constituent  characters  are  letters,  digits,   and   the
          underscore.
   -F, --fixed-strings
          Interpret PATTERN as a  list  of  fixed  strings,  separated  by
          newlines,  any  of  which is to be matched.  (-F is specified by
          POSIX.)
   -A NUM, --after-context=NUM
          Print NUM  lines  of  trailing  context  after  matching  lines.
          Places   a  line  containing  a  group  separator  (--)  between
          contiguous groups of matches.  With the  -o  or  --only-matching
          option, this has no effect and a warning is given.

Однако в большинстве случаев ваши последовательности будут состоять из нескольких строк, и этого будет недостаточно. Если вы будете делать подобные вещи часто, я предлагаю вам установить набор инструментов exonerate . Как правило, они чрезвычайно полезны для работы в области биоинформатики и включают в себя прекрасный инструмент под названием fastafetch , который разработан, чтобы делать именно то, что вы хотите:

  1. Установите пакет exonerate. Он находится в репозиториях систем на основе Debian, а также доступен по ссылке здесь .

     sudo apt-get install exonerate
     
  2. Создайте индекс для вашего файла fasta. Это используется для быстрого поиска последовательностей.

     fastaindex seq.fasta seq.idx
     
  3. Извлеките ваши последовательности:

     $ fastafetch -f seq.fasta -i seq.idx -Fq <(sort -u list.txt)
     > 3566454__len__1744
    GGTTTGTAAGACCGTAGAGGGTTTGTAAGACCGTAGAG
     > 58759__len__2903
    TTTTCCGTAGAGGAGATCCCTATTTTTAGGTTTGTAAGAGATCATTTT
     > 673957__len__1655
    CCCTATTTTTAGGTTTGTAAGGTTTGTAAGACCGTAGAG
     

В качестве примечания, я написал сценарий, который может делать это и многое другое. Он может принимать один или несколько списков входных идентификаторов и извлекать соответствующие последовательности из мультифаста. Он может либо печатать в STDOUT, либо создавать файл для каждого входного списка. Вы можете найти его здесь .

7
27.01.2020, 21:52

Теги

Похожие вопросы