#!/bin/sh# 一行目に起動するシェルを指定．# '#!'の文字の後に，起動するシェルのファイル名を書く．# たいていのシステムなら，Bourne Shellの場合は'/bin/sh，# C Shellの場合は'/bin/csh'である．（GMT開発者の方はC Shell派のようだが．）# 以下は'Bourne Shell'の文法でスクリプトを書いている．### 余談 #### GMTの新しいバージョンには，最近はやりの'Bourne Again Shell'# の文法を使った example もあるので参考にしよう．# シェルのファイル名は，たいてい'/bin/bash'か'/usr/local/bin/bash'．# bashは非常に強力なプログラミング機能を持っている．要チェック！# シェル変数に，パラメータを代入する．# パラメータとは，データファイル名や書かせる値の範囲，# タイトルの文字列などである．# ';'でシェルの命令を区切ることにより，一行に複数の命令が書ける．# Bourne Shellの場合は，イコール'='の前後にスペースを入れてはいけない．# '#'記号の後には，コメントを書くことが出来る．input=e1106d1.spec2       # 入力データファイル名（スペクトルのデータ）．output=specplot1.ps       # 出力させるPostScriptファイル名．fmin=0.1; fmax=100        # 書かせる周波数の範囲．amin=0.000001; amax=0.01  # 書かせる地動速度の範囲．range=$fmin/$fmax/$amin/$amax# シェル変数fmin,fmax,amin,amaxを，rangeというシェル変数に代入している．# シェル変数の前に'$'マークを付けると，シェル変数の値に展開される．# この場合，rangeには'0.1/100/0.000001/0.01'という文字列が代入される．sizex=12.0; sizey=12.0    # 図の大きさの指定(cm)．縦がsizexで横がsizey．x_axis=a1pf3:"Hz":        # 横軸の書式とタイトルの指定．y_axis=a1pf3:"(cm/s)s":   # 縦軸の書式とタイトルの指定．title=:.$input:           # タイトルの指定．入力ファイル名($input)を使っている．axis_tick=WeSn            # グラフの数字を書く軸を指定．xorg=9.0; yorg=5.0        # グラフの原点の位置．紙の左下からの距離(cm)．awk '{if(NR>=4) print $1,$2}' $input | \psxy -JX${sizex}l/${sizey}l -R$range -B$x_axis/$y_axis$title$axis_tick \ -X$xorg -Y$yorg -V > $output# psxyを使って，実際にグラフを書かせている命令．# シェルスクリプトの場合，行が長くなった場合には，# 行末にバックスラッシュ'\'を書くと次の行も続いていると見なされる．# 上の命令を，シェル変数を展開して書くと以下のようになる．# 変数展開したものを使って，順次説明する．################################################################ awk '{if(NR>=4) print $1,$2}' e1106d1.spec2 | \# psxy -JX12.0l/12.0l -R0.1/100/0.000001/0.01 -Ba1pf3:"Hz":/a1pf3:"(cm/s)s"::.e1106d1.spec2:WeSn \#  -X9.0 -Y5.0 -V >| specplot1.ps############################################################### awk '{if(NR>=5) print $1,$2}' e1106d1.spec2 | ## データファイルの４行目まではヘッダーなので，# awkを使って５行目以降のみを標準出力させている．# その出力をパイプでpsxyに標準入力から渡している．# NRはawkの予約変数で，データの行数を表す．# これは，以下のようにtailコマンドを使ってもよい．（こちらの方が手軽かも）# tail +5 e1106d1.spec2### 以下psxyコマンドのオプション #### -JX12.0l/12.0l ## X軸の長さを12cm，Y軸の長さを12cmに指定．# 小文字のエル'l'は，グラフの目盛をlog10にすることを表す．# -R0.1/100/0.000001/0.01 ## グラフを書かせる値の範囲を指定．# 0.1/100がX軸の範囲，0.000001/0.01がY軸の範囲を示している．# -Ba1pf3:"Hz":/a1pf3:"(cm/s)s"::.e1106d1.spec2:WeSn ## グラフの枠の指定．（項目多数）# -B/X軸の指定/y軸の指定:.タイトル:数字を書く軸の指定 という具合．#   a1p               X軸の数字の間隔と書式を10^nHz(TeX形式)にしている．#   f3                X軸の目盛間隔#   :"Hz":            X軸のタイトル#   a1pf3             Y軸の数字，目盛間隔の指定（X軸と同じ）．#   :"(cm/s)s":       Y軸のタイトル.#   :.e1106d1.spec2:  グラフのタイトル．#   WeSn              数字を書かせる軸の指定．#                     W（左）とS（下）が大文字なので，左と下に数字を書く．# -X9.0 -Y5.0 ## グラフを書かせる位置を，紙の左下からの距離(cm)で指定．# -X9.0でX方向に9cm，-Y5.0でY方向に5cmのところをグラフの原点にしている．# -V ## 今どんな処理をしているかを実況中継(verpose)．# エラーメッセージも吐いてくれるのでデバックに便利．# >| specplot1.ps ## psxyが吐き出すPostScriptコードをspecplot1.psというファイルに書き出す．# ちなみに >| の| は，既存のファイルに強制的に上書きするという意味．# C shellの場合には >! になる．