#!/bin/bash # default values PROGNAME=$(basename $0) FULLPROG=$0 # usage function usage () { echo "usage: $PROGNAME [-h] [-r] file" echo " -h: help message" echo " -s: set stats" echo " -r: reset stats" echo " file: data to monitor" } # reset function reset () { echo "reseting stats" [ -f $resource ] && rm $resource } # variables set= files= resource=$HOME/.$PROGNAME # parameter processing while [ $# -gt 0 ]; do case "$1" in -h) usage; exit 0;; -s) set="yes";; -r) reset; exit 0;; *) files="$files $1";; esac shift done # check arguments [ "$files" ] || { echo "no file specified"; exit 1; } # read old values [ -f $resource ] && source $resource for f in $files; do # check file f=$(echo $f | sed 's,//*,/,g') [ -f $f ] || { echo "can't find file '$f'"; exit 1; } # main var=${f//\//_} newvar=($(awk '{ for (i = 1; i <= NF; i++) if ($(i) ~ /^[-+0-9][0-9]*$/) printf " %s", $(i) }' $f)) eval oldvar=(\${$var[@]}) # compute diff for ((i=0; i<${#newvar[@]}; i++)); do [ "${oldvar[$i]}" ] && v[$i]=$((newvar[i] - oldvar[i])) || v[$i]=${newvar[$i]} done # ouput if [ "$set" = "yes" ]; then echo "$var=(${newvar[@]})" >>$resource else str="" for ((i=0; i<${#v[@]}; i++)); do str="$str; v[$i]=${v[$i]}" done awk 'BEGIN { k=0 '"$str"' } { for (i=1; i<=NF; i++) if ($(i) ~ /^[-+0-9][0-9]*$/) $(i)=v[k++]; print }' $f fi done # clean resource file if [ "$set" = "yes" ]; then awk -F= '{ a[$1]=$2 } END { for (i in a) print i "=" a[i] }' $resource > $resource.n mv -f $resource.n $resource fi