Как объединить файлы с одинаковыми именами в один файл с разными заголовками? - PullRequest
0 голосов
/ 26 декабря 2018

Моя проблема больше в том, как переименовать строку заголовка для каждой последовательности fastta, поскольку я знаю, как объединить несколько файлов fasta в один файл.Проблема в том, что после создания моих файлов каждый файл имеет точно такой же заголовок (имя гена, который был проанализирован).Поэтому я хочу просто объединить последовательности, но вместо того, чтобы сохранить один и тот же заголовок, я хочу использовать имя файла в качестве заголовка.

Например, у меня есть два файла fastta, первый из которых:

Homo_sapien_XYZ_20102.fa

И внутри этого файла последовательность:

>gene_X
ACTGAGGCCAATGAA...

Затем второй файл с именем:

Homo_sapein_ABC_20102.fa

>gene_X
CCCTGAGTAGAT...

Когда я объединяю эти файлы, я получаю один новый файлкоторые имеют разные последовательности, но идентичные заголовки (и из-за природы сценариев, которые я использую для генерации этих отдельных последовательностей, я не могу изменить имя заголовка до этого шага).

>gene_X
ACTGAGGCCAATGAA...
>gene_X
CCCTGAGTAGAT...

Это будет проблематично, поэтому янадеялся переписать этот заголовок, используя имя файла, чтобы оно получилось:

>Homo_sapien_XYZ_20102
ACTGAGGCCAATGAA...
>Homo_sapein_ABC_20102
CCCTGAGTAGAT...

Кто-нибудь знает, как это сделать?Строка кода, которую я использовал для создания одного файла последовательностей, просто:

#!/bin/bash

for files in *_20102.fa
do
    cat ${files} >> geneA_consensus.fa
done

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

awk на помощь!

$ awk 'FNR==1{print FILENAME; next}1' *_20102.fa > geneA_consensus.fa

петли не нужны.

0 голосов
/ 26 декабря 2018

Это работает с моим тестовым набором.

for file in *.fasta
do
   echo ">$file" >> out.fasta
   tail -n +2 $file >> out.fasta
   echo >> out.fasta
done

Эта простая версия включает в себя расширение имени файла.

Это последнее эхо гарантирует, что следующий заголовок появится в отдельной строке, даже если предыдущий файл FASTA не заканчивался новой строкой.

0 голосов
/ 26 декабря 2018

Оставаясь близко к вашему коду, я отображаю заголовок как новый заголовок и опускаю заголовок при выводе файла:

#!/bin/bash

for file in *_20102.fa
do
    echo ${file%%.*} >> geneA_consensus.fa
    tail +2 $file >> geneA_consensus.fa
done

Также обратите внимание, что я немного изменил имя переменной цикла.

...