grep 命令用于 grep gff 文件中第一个文件中的基因列表

grep 命令用于 grep gff 文件中第一个文件中的基因列表

我正在使用此命令来 grep gff 文件中第一个文件中的基因列表。

grep  -w -f upregulated_genes_in_BEg GCA_900659725.1_ASM90065972v1_genomic.gff

它对我不起作用..请提出任何建议。

第一个文件中的基因列表..

LOCUS10095
LOCUS10108
LOCUS10129
LOCUS10130
LOCUS10152
LOCUS10161
LOCUS10225
LOCUS10252
LOCUS10266
LOCUS10268
LOCUS10294
LOCUS10313
LOCUS10351
LOCUS10355
LOCUS10358

答案1

跳过-w标志到grep,因为这限制了搜索在字边界处的匹配定义为grep(来自文档,“仅选择包含构成整个单词的匹配项的行。”)。该命令产生预期的输出:

cat > GCA_900659725.1_ASM90065972v1_genomic.gff <<EOF
CAACVG010000001.1 EMBL region 1 15202 . + . ID=CAACVG010000001.1:1..15202;Dbxref=taxon:64391;gbkey=Src;mol_type=genomic DNA;note=contig: 10000|quiver
CAACVG010000001.1 EMBL gene 4526 9821 . - . ID=gene-CALMAC_LOCUS1;Name=CALMAC_LOCUS1;gbkey=Gene;gene_biotype=protein_coding;locus_tag=CALMAC_LOCUS1
EOF

cat > upregulated_genes_in_BEg <<EOF
LOCUS1
LOCUS10095
EOF

grep -f upregulated_genes_in_BEg GCA_900659725.1_ASM90065972v1_genomic.gff

印刷:

CAACVG010000001.1 EMBL gene 4526 9821 . - . ID=gene-CALMAC_LOCUS1;Name=CALMAC_LOCUS1;gbkey=Gene;gene_biotype=protein_coding;locus_tag=CALMAC_LOCUS1

如果您需要精确控制字边界,也许这个 Perl 单行代码是更好的选择:

perl -lne 'BEGIN { @upregulated_genes_in_BEg = `cat upregulated_genes_in_BEg`; %is_upregulated_gene_in_BEg = map { $s = $_; chomp $s; ( $s => 1 ) } @upregulated_genes_in_BEg; } ( $gene ) = m{(LOCUS\w+)}; print if $is_upregulated_gene_in_BEg{ $gene };  ' GCA_900659725.1_ASM90065972v1_genomic.gff

单行代码将含有上调基因的文件内容读取到哈希值中。然后,它使用该散列来查找该散列是否LOCUS...在当前行中包含该单词。如果散列包含该单词,则打印该行。

Perl 单行代码使用以下命令行标志:
-e:告诉 Perl 查找内联代码,而不是在文件中。
-n:一次循环输入一行,$_默认将其分配给。 :在内联执行代码之前
-l剥离输入行分隔符(默认在 *NIX 上),并在打印时附加它。"\n"

也可以看看:
perldoc perlrun:如何执行Perl解释器:命令行开关
perldoc perlre:Perl 正则表达式(regexes)
perldoc perlre:Perl 正则表达式(regexes):量词;字符类和其他特殊转义;断言;捕获组
perldoc perlrequick:Perl正则表达式快速入门

相关内容