GMT ver.5 で貸出記録の印刷 や GMTでニュース見出しをグラフ化する で個別には実現していましたが、今回一般化してみました。
#!/bin/bash cntl=`getparstr $# "$*" "cntl"` #入力する制御用ファイル psfile=`getparstr $# "$*" "psfile"` # 出力するPSファイル # カラムの数は制御用ファイルの1行目で決定します num_column=`cat $cntl |\ awk 'NR==1{print NF}'` # 行の数は制御用ファイルの2行目の第1変数で決定します num_row=`cat $cntl |\ awk 'NR==2{print $1}'` # 行の幅は制御用ファイルの2行目の第2変数で決定します int_row=`cat $cntl |\ awk 'NR==2{print $2}'` hight=`bc -l << _BC_ $num_row * $int_row _BC_` temp=`mktemp ./XXXX.tmp` cat /dev/stdin > $temp # 標準入力を一時ファイルに持っておきます rm $psfile x=2.5 for (( c=0; c<$num_column; c++ )) do # カラムのループ c1=`expr $c + 1` if [ $c1 -eq 1 ] then flg1="-K" flg2="-O -K" elif [ $c1 -eq $num_column ] then flg1="-O -K" flg2="-O" else flg1="-O -K" flg2="-O -K" fi width=`cat $cntl |\ awk -v c="$c1" 'NR==1{print $c}'` gmt psbasemap -P -JX${width}c/${hight}c \ -R0/${width}/-${num_row}/0 \ -Bwesn \ -Byg1 \ -X${x}c \ ${flg1} >> $psfile cat $temp |\ awk -v c="$c1" '{printf "0.2 -%f %s\n",NR-0.1,$c}' |\ gmt pstext -J -R -F+jBL+a0.0+f8p,GothicBBB-Medium-UniJIS-UTF8-H,0/0/0 ${flg2} >> $psfile x=$width done # カラムのループ終端 rm $temp
cntlで指定するファイルは制御用のものでカラムの幅や行数・幅を指定しています。
例えば
1.0 10.0 5.0
20 0.4
だと、第一カラムが1.0cm、第二カラムが10.0cm、第三カラムが5.0cmの3列からなります。行数は20行で各行の高さが0.4cmであることを意味しています。
表形式に成型されているテキストファイルを標準入力から流し込んで使用します。
本日、早朝から報道されているニュースの見出しを表形式にしてみました。