我希望将输入文件中的行@cluster t.# has ### elements
(包括此行)和行@cluster t.#+1 has ### elements
(最好省略此行)之间的所有内容打印到相应的编号输出文件(clust(#).txt
)中。到目前为止,该脚本创建了适当的编号文件,没有任何内容。
#!/usr/bin/perl
use strict;
use warnings;
open(IN,$ARGV[0]);
our $num = 0;
while(my $line = <IN>) {
if ($line =~ /^\@cluster t has (\d+) elements/) {
my $clust = "full";
open (OUT, ">clust$clust.txt");
} elsif ($line =~ m/^\@cluster t.(\d+.*) has (\d+) elements/) {
my $clust = $1;
$num++;
open (OUT, ">clust$clust.txt");
print OUT, $_ if (/$line/ ... /$line/);
}
}
发布于 2018-02-14 09:15:28
我有一个更简洁的方法来提供:
perl -ne 'print if /^foo/ .. /^base/' file.txt
样本输入
Lorem ipsum dolor
sit amet,
consectetur adipiscing
foo
bar
base
elit,
sed do
输出
foo
bar
base
https://stackoverflow.com/questions/37935282
复制相似问题