Commit | Line | Data |
---|---|---|
4aba78da LM |
1 | #!/bin/bash |
2 | ||
3 | # default values | |
4 | PROGNAME=$(basename $0) | |
5 | FULLPROG=$0 | |
6 | ||
7 | # usage | |
8 | function usage () { | |
9 | echo "usage: $PROGNAME [-h] [-r] file" | |
10 | echo " -h: help message" | |
11 | echo " -s: set stats" | |
12 | echo " -r: reset stats" | |
13 | echo " file: data to monitor" | |
14 | } | |
15 | ||
16 | # reset | |
17 | function reset () { | |
18 | echo "reseting stats" | |
19 | [ -f $resource ] && rm $resource | |
20 | } | |
21 | ||
22 | # variables | |
23 | set= | |
24 | files= | |
25 | resource=$HOME/.$PROGNAME | |
26 | ||
27 | # parameter processing | |
28 | while [ $# -gt 0 ]; do | |
29 | case "$1" in | |
30 | -h) usage; exit 0;; | |
31 | -s) set="yes";; | |
32 | -r) reset; exit 0;; | |
33 | *) files="$files $1";; | |
34 | esac | |
35 | shift | |
36 | done | |
37 | ||
38 | # check arguments | |
39 | [ "$files" ] || { echo "no file specified"; exit 1; } | |
40 | ||
41 | # read old values | |
42 | [ -f $resource ] && source $resource | |
43 | ||
44 | for f in $files; do | |
45 | ||
46 | # check file | |
47 | f=$(echo $f | sed 's,//*,/,g') | |
48 | [ -f $f ] || { echo "can't find file '$f'"; exit 1; } | |
49 | ||
50 | # main | |
51 | var=${f//\//_} | |
52 | newvar=($(awk '{ for (i = 1; i <= NF; i++) if ($(i) ~ /^[-+0-9][0-9]*$/) printf " %s", $(i) }' $f)) | |
53 | eval oldvar=(\${$var[@]}) | |
54 | ||
55 | # compute diff | |
56 | for ((i=0; i<${#newvar[@]}; i++)); do | |
57 | [ "${oldvar[$i]}" ] && v[$i]=$((newvar[i] - oldvar[i])) || v[$i]=${newvar[$i]} | |
58 | done | |
59 | ||
60 | # ouput | |
61 | if [ "$set" = "yes" ]; then | |
62 | echo "$var=(${newvar[@]})" >>$resource | |
63 | else | |
64 | str="" | |
65 | for ((i=0; i<${#v[@]}; i++)); do | |
66 | str="$str; v[$i]=${v[$i]}" | |
67 | done | |
68 | awk 'BEGIN { k=0 '"$str"' } { for (i=1; i<=NF; i++) if ($(i) ~ /^[-+0-9][0-9]*$/) $(i)=v[k++]; print }' $f | |
69 | fi | |
70 | ||
71 | done | |
72 | ||
73 | # clean resource file | |
74 | if [ "$set" = "yes" ]; then | |
75 | awk -F= '{ a[$1]=$2 } END { for (i in a) print i "=" a[i] }' $resource > $resource.n | |
76 | mv -f $resource.n $resource | |
77 | fi |