| #! /bin/sh | |
| set -e | |
| PREFIX=$1 | |
| shift | |
| trap 'rm -r $TMPDIR' 0 | |
| TMPDIR=`mktemp -d` | |
| exec 3>/dev/null | |
| for f; do | |
| while IFS=" | |
| " read -r LINE; do | |
| case "$LINE" in | |
| *$PREFIX:[0-9]*:\**) | |
| NUM=`echo "$LINE" | sed "s/.*$PREFIX:\([0-9]*\).*/\1/"` | |
| if [ -f $TMPDIR/$NUM ]; then | |
| echo "$TMPDIR/$NUM already exits prior to $f" | |
| exit 1 | |
| fi | |
| exec 3>>$TMPDIR/$NUM | |
| echo $f | sed 's,\.\./,,g' > $TMPDIR/.$NUM | |
| /bin/echo "$LINE" | sed -e "s/$PREFIX:[0-9]*//" -e "s/:\*/*/" >&3 | |
| ;; | |
| *$PREFIX:[0-9]*) | |
| NUM=`echo "$LINE" | sed "s/.*$PREFIX:\([0-9]*\).*/\1/"` | |
| if [ -f $TMPDIR/$NUM ]; then | |
| echo "$TMPDIR/$NUM already exits prior to $f" | |
| exit 1 | |
| fi | |
| exec 3>>$TMPDIR/$NUM | |
| echo $f | sed 's,\.\./,,g' > $TMPDIR/.$NUM | |
| /bin/echo "$LINE" | sed "s/$PREFIX:[0-9]*//" >&3 | |
| ;; | |
| *:\**) | |
| /bin/echo "$LINE" | sed -e "s/:\*/*/" -e "s,/\*\*/,," >&3 | |
| echo >&3 | |
| exec 3>/dev/null | |
| ;; | |
| *) | |
| /bin/echo "$LINE" >&3 | |
| ;; | |
| esac | |
| done < $f | |
| echo >&3 | |
| exec 3>/dev/null | |
| done | |
| LASTFILE="" | |
| for f in $TMPDIR/*; do | |
| if [ "$LASTFILE" != $(cat $TMPDIR/.$(basename $f) ) ]; then | |
| LASTFILE=$(cat $TMPDIR/.$(basename $f) ) | |
| echo "[ $LASTFILE ]" | |
| fi | |
| cat $f | |
| done | |