59 lines
1.2 KiB
Text
59 lines
1.2 KiB
Text
|
#! /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
|
||
|
|