首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grep命令grep在gff文件中的第一个文件中的基因列表。

grep命令grep在gff文件中的第一个文件中的基因列表。
EN

Unix & Linux用户
提问于 2021-10-04 09:10:27
回答 1查看 384关注 0票数 -2

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

代码语言:javascript
复制
grep  -w -f upregulated_genes_in_BEg GCA_900659725.1_ASM90065972v1_genomic.gff

这对我没用..。请有任何建议。

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

代码语言:javascript
复制
LOCUS10095
LOCUS10108
LOCUS10129
LOCUS10130
LOCUS10152
LOCUS10161
LOCUS10225
LOCUS10252
LOCUS10266
LOCUS10268
LOCUS10294
LOCUS10313
LOCUS10351
LOCUS10355
LOCUS10358
EN

回答 1

Unix & Linux用户

发布于 2021-10-04 21:04:20

跳过-w标志到grep,因为这限制了搜索在 grep定义的单词边界as上匹配(从文档中,“只选择那些包含匹配词的行”)。此命令生成预期的输出:

代码语言:javascript
复制
cat > GCA_900659725.1_ASM90065972v1_genomic.gff < upregulated_genes_in_BEg <

指纹:

代码语言:javascript
复制
CAACVG010000001.1 EMBL gene 4526 9821 . - . ID=gene-CALMAC_LOCUS1;Name=CALMAC_LOCUS1;gbkey=Gene;gene_biotype=protein_coding;locus_tag=CALMAC_LOCUS1

如果您需要对单词边界进行精确控制,那么这个Perl一行程序也许是一个更好的选择:

代码语言:javascript
复制
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"),然后在打印时追加它。

<#>SEE还: perldoc perlrun*如何执行Perl解释器:命令行开关 perldoc perlre:Perl正则表达式(regexes) perldoc perlrePerl正则表达式(regexes):量词;字符类和其他特殊的替身;断言;捕获组 perldoc perlrequick:Perl正则表达式快速启动

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/671752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档