#! /bin/csh -f # Last edited on 2008-02-04 20:51:18 by stolfi set usage = "$0 [-field FN] [-title 'TITLE'] [-keys 'TIT1 .. TITn'] FRFILE1 .. FRFILEn > EPSFILE" # Generates a log-log Zipf plot (word's frequency fr(w) versus # word's frequency rank rk(w), for all words w), with a 1/rk # comparison curve. # # The files must be sorted by decreasing frequency. Assumes # the frequency is field FN of each file (default FN = 2). set title = " " set keys = ( ) set field = 2 while ( ( $#argv > 0 ) && ( "/$1" =~ /-* ) ) if ( ( $#argv >= 2 ) && ( "/$1" == "/-field" ) ) then set field = "$2"; shift; shift else if ( ( $#argv >= 2 ) && ( "/$1" == "/-title" ) ) then set title = "$2"; shift; shift else if ( ( $#argv >= 2 ) && ( "/$1" == "/-keys" ) ) then set keys = ( `echo $2` ); shift; shift else echo "bad option $1" echo "usage: ${usage}"; exit 1 endif end if ( $#argv == 0 ) then echo "usage: ${usage}"; exit 1 endif set files = ( $* ) if ( ( $#keys != 0 ) && ( $#keys != $#files ) ) then echo "keys don't match files"; exit 1 endif set gfile = "/tmp/$$.gnuplot" set psfile = "/tmp/$$.eps" cat < ${gfile} set size 1.0,1.2 set term postscript eps "Courier" 28 set output "${psfile}" set title "${title}" set logscale xy plot (abs(x)<0.9?1/0:0.1/x) notitle with lines lt 3 \ , (abs(x)<0.9?1/0:0.01/x) notitle with lines lt 3 \ EOF @ lt = 1 @ pt = 1 foreach ifile ( $files ) if ( $#keys == 0 ) then set key = "${f:r}"; set key = "${key:t}" else set key = ${keys[1]}; set keys = ( ${keys[2-]} ) endif echo ', "'"${ifile}"'" using :'"${field}"' title "'"${key}"'" with lines lt '"${lt}"' \' >> ${gfile} @ lt = 2 @ pt = $pt + 1 end cat <> ${gfile} quit EOF gnuplot < ${gfile} cat ${psfile} /bin/rm -f ${gfile} ${psfile}