#!/bin/bash if [ $# -le 2 ]; then echo "$0 PSFILE PAGE1 [PAGE2...PAGEn]" >&2 exit 1 fi psfile="$1" shift fpage=$( egrep -n "^%%Page: 1 1" $psfile | sed -e 's/^\([0-9]\+\):.*/\1/' ) if [ "$fpage" == "" ]; then echo "cannot find first page" >&2 exit 1 fi fpage=$(( $fpage - 1 )) totlines=$( cat $psfile | wc -l ) cat $psfile |head -n $fpage > head.$$ echo "$psfile has $totlines lines" npages=1 for plist in $* do ppage=$( egrep -n "^%%Page: [0-9]* $plist" $psfile |sed -e 's/^\([0-9]\+\):.*/\1/' ) if [ "$ppage" == "" ]; then echo "page $plist does not exist" >&2 continue fi echo "Page $plist start at line $ppage" gcut=$(( $totlines - $ppage + 1 )) echo "Page $plist, tail at $gcut" cat $psfile |tail -n $gcut > part.$$ epage=$( egrep -n "^%%PageTrailer" part.$$ |sed -e 's/^\([0-9]\+\):.*/\1/' |cut -d" " -f1 ) if [ "$epage" == "" ]; then #se non trova PageTrailer, prova a cercare la pagina successiva... nplist=$(( $plist + 1 )) sucpage=$( egrep -n "^%%Page: [0-9]* $nplist" part.$$ |sed -e 's/^\([0-9]\+\):.*/\1/' ) if [ "$sucpage" == "" ]; then echo "cannot find end of page $plist ..." >&2 echo "it could be the last page... if it is not I can't do no more" >&2 echo -n "Is it the last pages? [y/N] " read lastpag if [ "$lastpag" != "y" ]; then echo "cannot find page $plist trailer!" >&2 rm part.$$ continue else sucpage=$( egrep -n "^%%Trailer" part.$$ |sed -e -e 's/^\([0-9]\+\):.*/\1/' ) fi else echo "Page $plist, succ is $nplist, found at $sucpage" epage=$(( $sucpage - 1 )) fi fi #epage=$(( $epage - 1 )) echo "Page $plist ends at line $(( $ppage + $epage ))" cat part.$$ |head -n $epage |sed -e "s/^%%Page: [0-9]* $plist/%%Page: $npages $npages/" >> head.$$ npages=$(( $npages + 1 )) done npages=$(( $npages - 1 )) rm part.$$ trailline=$( egrep -n "^%%Trailer" $psfile |sed -e 's/^\([0-9]\+\):.*/\1/' ) traill=$(( $totlines - $trailline + 1 )) echo "Trailer starts at $trailline, tail at $traill" cat $psfile |tail -n $traill |sed -e "s/^%%Pages: [0-9]*/%%Pages: $npages/" >> head.$$ mv head.$$ $(echo "$psfile" |sed -e 's/\.ps$//')-page.ps exit 0