我有一个像这样的文本文件
count="4"
data1
data2
data3
Data1
Data2
Data3
我需要搜索字符串count
并获取其值(4)并打印接下来的3行计数(4)次。
文件中的输出应为
data1
data2
data3
data1
data2
data3
data1
data2
data3
data1
data2
data3
Data1
Data2
Data3
我试过这个Perl代码
while ( <FILE> ) {
$n = 3
if ( $_ =~ /count="4"/ ) {
print FILE if ($n-- > 0) x 4;
}
但它没有用。
答案 0 :(得分:4)
但它不起作用。
这是因为
if ($n-- > 0) x 4
没有做你想要的。 x
重复一个值(即您正在执行if 1111
),它不会重做语句。
尝试:
use strict; use warnings;
while (<FILE>) {
if ( /count="(\d+)"/ ) {
for ( 1..$1 ) {
if ( defined ( my $l = <FILE> ) ) {
print $l;
}
}
}
}
那会让你开始。
将来请注意:
use strict;
和use warnings;
- these will help you avoid mistakes。答案 1 :(得分:1)
您可以尝试这样的事情:
select *
答案 2 :(得分:0)
您可以在@data
#!/usr/bin/perl
use strict;
use warnings;
my @data = qw /count="4" data1-1 data2-1 data3-1 Data1 Data2 Data3/;
my $repeat_line = 3;
foreach (@data)
{
if ( /count="(\d+)"/ ) {
for ( 1..$1 ) {
for my $no1 ( 1..$repeat_line ) {
print $data[$no1],"\n";
}
}
}
}
for my $no ($repeat_line..scalar(@data)) {
if(defined $data[$no+1]){
print $data[$no+1],"\n";
}
}
输出
data1-1
data2-1
data3-1
data1-1
data2-1
data3-1
data1-1
data2-1
data3-1
data1-1
data2-1
data3-1
Data1
Data2
Data3
答案 3 :(得分:0)
你可以使用这个单行:
perl -ne 'print m/count="(\d+)"/?$n=(<>.<>.<>)x$1:$_' file
# ^ ^ ^ ^ ^^---- the current line.
# | | | | '---- else
# | | | '---- repeated $1 times
# | | '---- the three next lines (if any) stored in $n
# | '---- when this pattern succeeds,
# '---- Print,