#!/bin/bash
filter_log () {
next=0
while read line; do {
date="$(cut -d',' -f1 <<< "$line")"
[ $date -gt $next ] && {
echo "$date"
read m s <<< $(date -d @$date)
next=$(( $date + 3600 - 10#$min*60 - 10#$sec ))
}
}; done
}
plot () {
i_="\033[7m"
n_="\033[0m"
echo -n ' '
for i in {0..23}; do [ $(($i%2)) -eq 0 ] && printf "%-4d" "$i"; done; echo
while read line; do {
date="$(cut -d',' -f1 <<< "$line")"
day="$(date -d @$date +%Y-%m-%d)"
[[ "$day_last" != "$day" ]] && {
[ ! -z "$day_last" ] && echo
day_last=$day
echo -n "$day "
[ -z "$day_last" ] && day_last=$day
ptr=0
}
hr="$(date -d @$date +%-H)"
let diff=$hr-$ptr
for ((i=0; i<$diff; i++)); do echo -n ' '; done
let ptr=$hr+1
echo -ne "$i_ $n_"
}; done
echo
}
filter_log | plot
Replies to t_onlineplot 
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}