+#!/usr/bin/perl
+
+use strict;
+use RRDs;
+
+sub usage {
+ print("usage: mvrrd.pl src.rrd dst.rrd start end\n");
+}
+
+usage() if scalar(@ARGV) != 4;
+
+my $src = @ARGV[0];
+my $dst = @ARGV[1];
+my $start = $ARGV[2];
+my $end = $ARGV[3];
+
+sub RRDupdate {
+ my $time = shift;
+ my $val = shift;
+
+ my @arg = ();
+
+ push @arg, $dst;
+ push @arg, "$time:$val";
+ RRDs::update(@arg);
+ my $error = RRDs::error;
+ die "RRD error: $error\n" if $error;
+}
+
+my @arg = ();
+push @arg, "$src";
+push @arg, "AVERAGE";
+push @arg, "--start", $start;
+push @arg, "--end", $end;
+
+my ($dataStart,$step,$names,$data) = RRDs::fetch(@arg);
+my $error = RRDs::error;
+die "RRD error: $error\n" if $error;
+print "Start: ", scalar localtime($dataStart), " ($dataStart)\n";
+print "Step size: $step seconds\n";
+print "DS names: ", join (", ", @$names)."\n";
+print "Data points: ", $#$data + 1, "\n";
+print "Data:\n";
+for my $line (@$data) {
+# print " ", scalar localtime($dataStart), " ($dataStart) ";
+ my ($sec, $min, $hour, $mday, $mon, $year) = localtime($dataStart);
+ my $isoDate = sprintf("%04d%02d%02d", $year + 1900, $mon + 1, $mday);
+ for my $val (@$line) {
+# printf "%f ", $val;
+ $val = 'U' if !defined $val;
+# print "val: $val @ time $isoDate";
+# print " ... Updating dst";
+ RRDupdate($dataStart, $val);
+ }
+ $dataStart += $step;
+# print "\n";
+}