我认为 perl 可以做到这一点,但我对 perl 很陌生。
希望有人可以帮助我。我有这样的文件(实际文件超过一万行,值按升序排列,有些值重复)。
1
2
2
35
45
我想根据值的相似性将这些行分成单独的文件(例如,值的差异小于 30)。
输出文件1
1
2
2
输出文件2
35
45
谢谢
我认为 perl 可以做到这一点,但我对 perl 很陌生。
希望有人可以帮助我。我有这样的文件(实际文件超过一万行,值按升序排列,有些值重复)。
1
2
2
35
45
我想根据值的相似性将这些行分成单独的文件(例如,值的差异小于 30)。
输出文件1
1
2
2
输出文件2
35
45
谢谢
这非常简单,只需在每次需要时打开一个新文件,即第一行数据,然后每次有 30 或更多的间隙。
该程序需要输入文件的名称作为命令行上的参数。
use strict;
use warnings;
use autodie;
my ($last, $fileno, $fh);
while (<>) {
my ($this) = /(\d+)/;
unless (defined $last and $this < $last + 30) {
open $fh, '>', 'outfile'.++$fileno;
}
print $fh $_;
$last = $this;
}
这应该很容易。只要记住变量中的前一个值,您就可以看到差异是否足够大。您还必须计算到目前为止创建的输出文件,以便在需要时命名新文件。
#!/usr/bin/perl
use warnings;
use strict;
my $threshold = 30;
my $previous;
my $count_out = 0;
my $OUTPUT;
while (<>) {
if (not defined $previous or $_ > $previous + $threshold) {
open $OUTPUT, '>', "outfile" . $count_out++ or die $!;
}
print $OUTPUT $_;
$previous = $_;
}