GMT ver.5で表の描画

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であることを意味しています。

表形式に成型されているテキストファイルを標準入力から流し込んで使用します。

 

f:id:S_E_Hyphen:20180102111353j:plain

本日、早朝から報道されているニュースの見出しを表形式にしてみました。