如何在 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。
先对fasta文件进行预处理,将每个序列排成一行(这一点很重要)
awk '/^>/ {printf("\n%s\n",[=11=]);next; } { printf("%s",[=11=]);} END {printf("\n");}' < file.fa > file1.fa
去掉第一个空行
tail -n +2 file1.fa > file2.fa
提取包含子字符串及其名称的目标序列,并将其保存到另一个文件中
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",,);}'
如何用一个linux命令Grep包含fasta文件或txt文件中特定基序的完整序列并将它们写入另一个文件?另外,我想在这些目标序列之前包含以“>”开头的行。
示例:我有一个包含 10000 个序列的 fasta 文件。
$cat file.fa
>姓名 1
AEDIA
>姓名 2
阿尔克美
>姓名 3
AAIII
我想 grep 包含 KME 的序列,所以我应该得到:
>姓名 2
阿尔克美
附件是我根据得到的答案目前正在使用的方式。也许其他人会觉得它有帮助。感谢 Pierre Lindenbaum、Philipp Bayer、cpad0112 和 batMan。
先对fasta文件进行预处理,将每个序列排成一行(这一点很重要)
awk '/^>/ {printf("\n%s\n",[=11=]);next; } { printf("%s",[=11=]);} END {printf("\n");}' < file.fa > file1.fa
去掉第一个空行
tail -n +2 file1.fa > file2.fa
提取包含子字符串及其名称的目标序列,并将其保存到另一个文件中
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",,);}'