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