替换fasta文件中几个序列的header行,并替换为列表(.txt)中存储的物种名称

replace the header line of several sequences in a fasta file and replace them with the species names stored in a list (.txt)

我有一个包含多个序列的 fasta 文件,但所有序列的第一行都以相同的字符串 (ABI) 开头,我想更改它并将其替换为存储在不同文本文件中的物种名称.

我的 fasta 文件看起来像

>ABI
AGCTAGTCCCGGGTTTATCGGCTATAC
>ABI
ACCCCTTGACTGACATGGTACGATGAC
>ABI
ATTTCGACTGGTGTCGATAGGCAGCAT
>ABI
ACGTGGCTGACATGTATGTAGCGATGA

spp 列表如下所示:

Alsophila cuspidata
Bunchosia argentea
Miconia cf.gracilis
Meliosma frondosa

我如何更改我的序列的那些 ABI headers 并使用准确的顺序将它们替换为我的物种名称。

所需输出:

>Alsophila cuspidata
AGCTAGTCCCGGGTTTATCGGCTATAC
>Bunchosia argentea
ACCCCTTGACTGACATGGTACGATGAC
>Miconia cf.gracilis
ATTTCGACTGGTGTCGATAGGCAGCAT
>Meliosma frondosa
ACGTGGCTGACATGTATGTAGCGATGA

我使用的是:

awk '
FNR==NR{
  a[]=
  next
}
( in a) && /^>/{
  print ">"a[]
  next
}
1
' spp_list.txt FS="[> ]"  all_spp.fasta

这不起作用,请有人指导我。

你好,我不是开发者所以不要无礼。

希望对您有所帮助:

我创建了一个文件 fasta.txt,其中包含:

>ABI
AGCTAGTCCCGGGTTTATCGGCTATAC
>ABI
ACCCCTTGACTGACATGGTACGATGAC
>ABI
ATTTCGACTGGTGTCGATAGGCAGCAT
>ABI
ACGTGGCTGACATGTATGTAGCGATGA

我还创建了一个文件 spplist.txt,其中包含:

Alsophila cuspidata
Bunchosia argentea
Miconia cf.gracilis
Meliosma frondosa

然后我创建了一个名为 fasta.py 的 python 脚本,这里是:

#!/bin/python3

#import re library: https://docs.python.org/3/library/re.html
#import sys library: https://docs.python.org/3/library/sys.html
import re,sys

#saving the reference of the standard output into "original_stdout"
original_stdout = sys.stdout


with open("spplist.txt", "r") as spplist:
    x = spplist.readlines()
    with open("fasta.txt", "r") as fasta:
        output_file = open("output.txt", "w")
        #redirecting standard output to output_file
        sys.stdout = output_file

        for line in fasta:
            if re.match(r">ABI", line):
                print(x[0].rstrip())
                del x[0]
            else:
                print(line.rstrip())

        #restoring the native standard output
        sys.stdout = original_stdout

#Notify the user at the end of the work
print("job done")

(如果你想让脚本按原样运行,这三个文件需要在同一个目录中)

这是我的目录树:

❯ tree
.
├── fasta.py
├── fasta.txt
└── spplist.txt

要执行脚本,打开一个shell,在目录中cd并输入:

❯ python3 fasta.py
job done

您将在目录中看到一个名为 output.txt 的新文件:

❯ tree
.
├── fasta.py
├── fasta.txt
├── output.txt
└── spplist.txt

这是它的内容:

Alsophila cuspidata
AGCTAGTCCCGGGTTTATCGGCTATAC
Bunchosia argentea
ACCCCTTGACTGACATGGTACGATGAC
Miconia cf.gracilis
ATTTCGACTGGTGTCGATAGGCAGCAT
Meliosma frondosa
ACGTGGCTGACATGTATGTAGCGATGA

希望对您有所帮助。 bguess.