-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquants
executable file
·48 lines (35 loc) · 996 Bytes
/
quants
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl
use warnings;
use strict;
use Scalar::Util qw(looks_like_number);
my @data = ();
my $n_weird = 0;
my $n_quant = shift;
die "Need number > 1 of quantiles as argument" unless defined($n_quant) && looks_like_number($n_quant) && $n_quant > 1;
while (<>) {
chomp;
if (looks_like_number($_)) { push @data, $_; }
else { $n_weird++; }
}
print STDERR "$n_weird items did not look like a number\n" if $n_weird;
if (!@data) {
print STDERR "No data - good luck, I've given you 0\n";
print "0\n";
exit 0;
}
if ($n_quant > @data) {
my $n = $n_quant;
$n_quant = @data;
print STDERR "Lowering quant size from $n to data size $n_quant\n";
}
my $k = @data / $n_quant;
print STDERR "Using $k for step size\n";
@data = sort { $a <=> $b } @data;
for (my $i=1; $i < $n_quant; $i++) {
my $j = int($i * $k - 1);
my $val = $data[$j];
if ($j+1 < @data) {
$val = ($val + $data[$j+1]) / 2 if $val < $data[$j+1];
}
print "$val\n";
}