#!/usr/bin/perl -w use 5.030; my @data; if (@ARGV){ @data = @ARGV; }else{ @data = split /\s+/, <>; } die "Error: Not tput utility" if (length(`which tput`)<3); my $lines = `tput lines`; chomp $lines; $lines--; my $cols = `tput cols`; chomp $cols; $cols--; if (@data < 3 || @data > $cols){ say "USAGE:"; say ""; say "$0 "; say "for printing a simple min-max plot $lines x $cols"; die "TOO FEW POINTS" if @data < 3; warn "TOO MUCH POINTS" if @data > $cols; } my $max = -9e99; my $min = 9e99; my $counter = 0; for my $i (@data){ $counter++; if (0+$i ne $i) { die "Not numeric $i at point $counter"; } if ($i <= $min) { $min = $i; } if ($i >= $max) { $max = $i; } last if $counter == $cols; } die "Error: nothing to plot! (min==max)." if $min == $max; my $range = $lines/($max-$min); my @xy; for my $y (1..$lines){ # MIN-MAX AXIS $xy[$y][1] = "|"; $xy[$y][$cols+1] = "\n"; if ($y == $lines){ $xy[$y][1] = "+"; for (2..$cols) { $xy[$y][$_] = "-"; } } } my %h; for my $x (1..$counter){ $h{ $data[$x-1] } = 1+ int ( ( $max-$data[$x-1] ) * $range ); $xy[ $h{ $data[$x-1] } ][$x] = "0"; } for my $y (1..$lines){ for my $x (1..$cols+1){ if (defined $xy[$y][$x]){ print $xy[$y][$x]; }else{ if ( $y % 20 == 0 && $x % 40 == 0 ){ print "ยท"; }else{ print " "; } } } } exit 0; __END__ Simple min-max plot in xterm