Perl的解决方案。另存为break-range.pl
,以perl break-range.pl input
运行。
#!/usr/bin/perl
use warnings;
use strict;
open my $F1, '>', 'file1' or die $!;
open my $F2, '>', 'file2' or die $!;
while (<>) {
chomp;
if (my ($low, $high) = /([0-9]+)-([0-9]+)/) {
my $middle = int(($low + $high)/2);
print $F1 "$low-$middle\n";
print $F2 $middle + 1, "-$high\n";
}
}
close $F1;
close $F2;
对于输出文件的非固定号码,您可以使用类似下面,运行它break-rangle.pl number-of-files input
。请注意,如果文件数大于间隔的大小,它可能不起作用。
#!/usr/bin/perl
use warnings;
use strict;
my $number = shift;
my @FH;
for my $i (0 .. $number - 1) {
open $FH[$i], '>', "file$i" or die $!;
}
while (<>) {
chomp;
if (my ($low, $high) = /([0-9]+)-([0-9]+)/) {
my $step = ($high - $low)/$number;
for my $i (0 .. $number - 1) {
print {$FH[$i]} int($low + $i * $step) + ($i > 0), '-',
int($low + ($i + 1) * $step), "\n";
}
}
}
close $_ for @FH;
我改变了你的脚本分为5个范围,但请引导我这样做的正确方法? (我发布它作为答案) – EpiMan
@MaryamSani:查看更新。 – choroba
非常感谢。很有帮助 – EpiMan