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