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