如何在 fasta 文件中 Grep 包含特定基序的完整序列?

How to Grep the complete sequences containing a specific motif in a fasta file?

如何用一个linux命令Grep包含fasta文件或txt文件中特定基序的完整序列并将它们写入另一个文件?另外,我想在这些目标序列之前包含以“>”开头的行。

示例:我有一个包含 10000 个序列的 fasta 文件。

$cat file.fa

>姓名 1

AEDIA

>姓名 2

阿尔克美

>姓名 3

AAIII

我想 grep 包含 KME 的序列,所以我应该得到:

>姓名 2

阿尔克美


附件是我根据得到的答案目前正在使用的方式。也许其他人会觉得它有帮助。感谢 Pierre Lindenbaum、Philipp Bayer、cpad0112 和 batMan。

  1. 先对fasta文件进行预处理,将每个序列排成一行(这一点很重要)

    awk '/^>/ {printf("\n%s\n",[=11=]);next; } { printf("%s",[=11=]);} END {printf("\n");}' < file.fa > file1.fa

  2. 去掉第一个空行

    tail -n +2 file1.fa > file2.fa

  3. 提取包含子字符串及其名称的目标序列,并将其保存到另一个文件中

    LC_ALL=C grep -B 1 KME file2.fa > result.txt

注:以KME为目标子串为例

grep -B1 KME file > output_file

-B1 : 在匹配前打印 1

如果你有多行 fasta 文件。首先linearize with awk,然后使用另一个awk过滤包含motif的序列。使用 grep 会很危险序列名称包含一个短主题。

awk '/^>/ {printf("%s%s\t",(N>0?"\n":""),[=10=]);N++;next;} {printf("%s",[=10=]);} END {printf("\n");}' input.fa |\
awk -F '\t' '{if(index(,"KME")!=0) printf("%s\n%s\n",,);}'