我正在使用这个命令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发布于 2021-10-04 21:04:20
跳过-w标志到grep,因为这限制了搜索在 grep定义的单词边界as上匹配(从文档中,“只选择那些包含匹配词的行”)。此命令生成预期的输出:
cat > GCA_900659725.1_ASM90065972v1_genomic.gff < upregulated_genes_in_BEg <指纹:
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"),然后在打印时追加它。
<#>SEE还: perldoc perlrun*如何执行Perl解释器:命令行开关 perldoc perlre:Perl正则表达式(regexes) perldoc perlrePerl正则表达式(regexes):量词;字符类和其他特殊的替身;断言;捕获组 perldoc perlrequick:Perl正则表达式快速启动
https://unix.stackexchange.com/questions/671752
复制相似问题