This is an example of how Gnuplot scripts can be embedded within Bash scripts using Bash Here Documents (heredocs):
#!/bin/bash filename="log/load_me.log.1368725550" awk '/for 10000000/ {c+=1; if(c > 46){n+=1; printf "%s\t%s\n", n, $2} }' $filename > log/values.dat window_size=50 ruby running_average.rb log/values.dat $window_size > log/averages.dat gnuplot -p <<EOSCRIPT set title 'Time to Insert Relationships in Batches of 10M in Neo4j batch-import' set xlabel 'Batches of 10M Rels on `date "+%Y-%m-%d at %H:%M:%S %Z"`' set ylabel 'Time Taken (s)' set grid # Draw trend line f(x) = a*x**3 + b*x**2 + c*x + d set fit quiet fit f(x) 'log/values.dat' using 1:(\$2/1000) via a,b,c,d unset fit # Scale column No.2 by 1000 to turn ms in s. plot 'log/values.dat' using 1:(\$2/1000) title 'Time to Insert Rels' with lines, f(x) title 'Fit', 'log/averages.dat' using 1:5 title "Average $window_size" with lines pause -1 "\n\nHit return to continue\n\n" EOSCRIPT num_stats=`wc -l log/values.dat | awk '{print $1}'` tail -$window_size log/values.dat | awk -v num_stats="$num_stats" '{n+=1; s+=$2} END{ avg=s/(n*1000); print "Average of last", n, "is", avg, "(s)"; print "Num Rels Stats =", num_stats; print "Hours Remaining =", (3300-num_stats+46)*avg/3600; printf "Percentage complete = %.2f%%\n", (num_stats * 100 / 3300.0); }' echo -e "Completed at `date`\n\n"
References
- Gnuplot fit command
- http://www.manpagez.com/info/gnuplot/gnuplot-4.6.0/gnuplot_263.php
- Bash Here Documents
- https://www.tldp.org/LDP/abs/html/here-docs.html
- Wikipedia Here Document
- https://en.wikipedia.org/wiki/Here_document