#! /bin/sh # # splitdb # # Splits according to "select -date lt ". The part # before gets put in ; the rest gets put in . # totals is run on and "transaction.initial balance" entries # from world are appended to , entry-date set to , A # flag set, to provide correct initial balances for that db; balancing # "transaction.closing balance" entries to world are appended to # to keep totals correct. # # Either of or may be the same as . # PATH=/home/mouse/acc/bin:"$PATH" case $# in 4) ;; *) echo "Usage: $0 " 1>&2 exit 1 ;; esac t=/tmp/splitdb.$$ trap 'touch '$t'.rm; rm -f '$t'.*; exit' 0 1 2 15 sdate=`ndate $2` edate=`ndate` sslock "$1" $$ || exit 1 sslock "$3" $$ || exit 1 sslock "$4" $$ || exit 1 select -split 3 -date lt $sdate < "$1" > $t.1 3> $t.2 totals -raw < $t.1 > $t.tot < $t.tot sed -e 's/^\(.*\):\(.*\):\(.*\)$/'$sdate\:$edate':A:transaction.initial balance::\1:\3:\2/' >> $t.2 < $t.tot sed -e 's/^\(.*\):\(.*\):\(.*\)$/'$sdate\:$edate':A:transaction.closing balance::\1:-\3:\2/' -e 's/:--/:/' >> $t.1 trap '' 1 2 15 cat $t.1 > "$3" cat $t.2 > "$4" ssunlock "$1" ssunlock "$3" ssunlock "$4" exit 0