我认为perl可以做到这一点,但我对perl很新 希望有人可以帮助我。 我有这样的文件(实际文件超过一万行,值按升序排列,一些值重复)。
1
2
2
35
45
我想根据值的相似性将这些行分成单独的文件(例如,值的差值小于30)。
outfile1
1
2
2
outfile2
35
45
谢谢
答案 0 :(得分:1)
这非常简单,只需在每次必要时打开一个新文件,即第一行数据,然后每次有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;
}
答案 1 :(得分:0)
这应该很容易。只需记住变量中的前一个值,就可以看出差异是否足够大。您还必须计算到目前为止创建的输出文件,以便在需要时命名新文件。
#!/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 = $_;
}