| #! /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 |
| |