英文:
Print the next line after match
问题
HaelonEVm219174t4 LR990882.1 Endotricha flammealis 80.702 57 11 0 0.043 54.5 10 Endotricha flammealis genome assembly, chromosome: 29
HaelonEVm2775195t2 OX438846.1 Eudonia truncicolella 88.372 43 3 1 0.009 53.6 29 Eudonia truncicolella genome assembly, chromosome: 21
英文:
My input:
# BLASTN 2.13.0+
# Query: ;HaelonEVm219174t4;
# Database: /data1/IxoSca/Databases/nt/nt
# Fields: subject id, subject sci names, % identity, alignment length, mismatches, gap opens, evalue, bit score, % query coverage per hsp, subject title
# 1 hits found
gi|1962480099|emb|LR990882.1| Endotricha flammealis 80.702 57 11 0 0.043 54.5 10 Endotricha flammealis genome assembly, chromosome: 29
# BLASTN 2.13.0+
# Query: ;HaelonEVm2775195t2;
# Database: /data1/IxoSca/Databases/nt/nt
# Fields: subject id, subject sci names, % identity, alignment length, mismatches, gap opens, evalue, bit score, % query coverage per hsp, subject title
# 1 hits found
gi|2452922202|emb|OX438846.1| Eudonia truncicolella 88.372 43 3 1 0.009 53.6 29 Eudonia truncicolella genome assembly, chromosome: 21
My code:
}
elsif($line =~ m/\s[1] hit/){
print "1 hits found: ".$name."\n";
$flag=1;
}
My output:
HaelonEVm219174t4 1 hits found: # Query: ;HaelonEVm219174t4;
HaelonEVm2775195t2 1 hits found: # Query: ;HaelonEVm2775195t2;
I want to print the next line in place of
"1 hits found: # Query: ;HaelonEVm219174t4;"
Expected output:
HaelonEVm219174t4 LR990882.1 Endotricha flammealis 80.702 57 11 0 0.043 54.5 10 Endotricha flammealis genome assembly, chromosome: 29
HaelonEVm2775195t2 OX438846.1 Eudonia truncicolella 88.372 43 3 1 0.009 53.6 29 Eudonia truncicolella genome assembly, chromosome: 21
答案1
得分: 5
当正则表达式匹配时,设置标志但不打印该行。当标志被设置时,打印当前行,然后清除标志。
use warnings;
use strict;
my $flag = 0;
while (<DATA>) {
if (m/\s[1] hit/) {
$flag = 1;
}
elsif ($flag) {
print;
$flag = 0;
}
}
__DATA__
# BLASTN 2.13.0+
# Query: ;HaelonEVm219174t4;
# Database: /data1/IxoSca/Databases/nt/nt
# Fields: subject id, subject sci names, % identity, alignment length, mismatches, gap opens, evalue, bit score, % query coverage per hsp, subject title
# 1 hits found
gi|1962480099|emb|LR990882.1| Endotricha flammealis 80.702 57 11 0 0.043 54.5 10 Endotricha flammealis genome assembly, chromosome: 29
# BLASTN 2.13.0+
# Query: ;HaelonEVm2775195t2;
# Database: /data1/IxoSca/Databases/nt/nt
# Fields: subject id, subject sci names, % identity, alignment length, mismatches, gap opens, evalue, bit score, % query coverage per hsp, subject title
# 1 hits found
gi|2452922202|emb|OX438846.1| Eudonia truncicolella 88.372 43 3 1 0.009 53.6 29 Eudonia truncicolella genome assembly, chromosome: 21
打印:
gi|1962480099|emb|LR990882.1| Endotricha flammealis 80.702 57 11 0 0.043 54.5 10 Endotricha flammealis genome assembly, chromosome: 29
gi|2452922202|emb|OX438846.1| Eudonia truncicolella 88.372 43 3 1 0.009 53.6 29 Eudonia truncicolella genome assembly, chromosome: 21
英文:
When the regex matches, set the flag but don't print anything for that line. When the flag is set, print the current line, then clear the flag.
use warnings;
use strict;
my $flag = 0;
while (<DATA>) {
if (m/\s[1] hit/) {
$flag = 1;
}
elsif ($flag) {
print;
$flag = 0;
}
}
__DATA__
# BLASTN 2.13.0+
# Query: ;HaelonEVm219174t4;
# Database: /data1/IxoSca/Databases/nt/nt
# Fields: subject id, subject sci names, % identity, alignment length, mismatches, gap opens, evalue, bit score, % query coverage per hsp, subject title
# 1 hits found
gi|1962480099|emb|LR990882.1| Endotricha flammealis 80.702 57 11 0 0.043 54.5 10 Endotricha flammealis genome assembly, chromosome: 29
# BLASTN 2.13.0+
# Query: ;HaelonEVm2775195t2;
# Database: /data1/IxoSca/Databases/nt/nt
# Fields: subject id, subject sci names, % identity, alignment length, mismatches, gap opens, evalue, bit score, % query coverage per hsp, subject title
# 1 hits found
gi|2452922202|emb|OX438846.1| Eudonia truncicolella 88.372 43 3 1 0.009 53.6 29 Eudonia truncicolella genome assembly, chromosome: 21
Prints:
gi|1962480099|emb|LR990882.1| Endotricha flammealis 80.702 57 11 0 0.043 54.5 10 Endotricha flammealis genome assembly, chromosome: 29
gi|2452922202|emb|OX438846.1| Eudonia truncicolella 88.372 43 3 1 0.009 53.6 29 Eudonia truncicolella genome assembly, chromosome: 21
答案2
得分: 2
你已经朝着设定标志位的正确方向迈出了一步。但是,不要立即打印,而是在标志位为真时打印。
my $flag = 0;
while (<>) {
if ( $flag ) {
print $line;
$flag = 0;
}
if ( $line =~ m/\s1 hit/ ) {
$flag = 1;
}
}
简化版本:
my $flag = 0;
while (<>) {
print if $flag;
$flag = /\s1 hit/;
}
英文:
You're on the right track with setting a flag. But instead of printing immediately, print when the flag is true.
my $flag = 0;
while (<>) {
if ( $flag ) {
print $line;
$flag = 0;
}
if ( $line =~ m/\s1 hit/ ) {
$flag = 1;
}
}
Simplified version:
my $flag = 0;
while (<>) {
print if $flag;
$flag = /\s1 hit/;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论