Как объединить файлы с одинаковыми именами в один файл с разными заголовками?

Моя проблема больше в том, как переименовать строку заголовка для каждой последовательности 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 ответа

Решение

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

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

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

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

awk в помощь!

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

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

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

#!/bin/bash

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

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

Другие вопросы по тегам