2012年6月28日木曜日

シェルスクリプト内でaliasを使う

例えば、.bashrc に
alias rm='rm -i'
と記述してあっても、
シェルスクリプト(test.bash)内で
#!/bin/bash
rm abc.txt
として
bash test.bash
としても、問答無用でファイルが削除されてしまる。

test.bash を呼び出したときには .bashrc が呼ばれないのが原因らしい。

そこで、.bashrc を読んでaliasを有効にするために
#!/bin/bash
shopt -s expand_aliases
source ~/.bashrc
rm abc.txt
とすると、ちゃんとabc.txtを削除するときに確認メッセージが出る。

2012年6月27日水曜日

SACとアスキーの変換

追記 2015/06/10

SACとはIRISが配布してる地震波の解析をするためのツール。
http://www.iris.edu/software/sac/manual.html

簡単にプロットしたいときとかフィルターとか、地震波に限らずいろいろ便利だから、アスキーファイルとの変換について。

SAC ファイルのフォーマットは上のページで公開されてるから、それにしたがって単純にファイルの読み書きをするファイルを java で作ってみた。

その jar ファイル。
SacTool.jar

参考までに使い方は
.bashrc とかに

SACTOOL={ダウンロードしたSacTool.jarのフルパス}
alias sac2ascii='java -cp $SACTOOL SacToAscii'
alias ascii2sac='java -cp $SACTOOL AsciiToSac'

と記述する。
source .bashrc
と設定を有効にしたのちに、SAC からアスキーへは
sac2ascii {SAC ファイル名} {変換後のアスキーファイル名}
アスキーから SACへは
ascii2sac {アスキーファイル名} {変換後の SAC ファイル名}
とする。

ちなみに、SAC からアスキーに変換するとき3つ目の引数に整数値を指定すると、その数に1つの割合でしか値を変換しないようにする。
これは、GMT とかでプロットするためだけに SAC からアスキーに変換したいけど、重くなるから間引いてプロットしたい場合に役立つ。
ただし、デシメーションフィルタはかけずにそのまま間引いてるので、処理する際には注意が必要。。

sac2ascii {SAC ファイル名} {変換後のアスキーファイル名} {間引きの間隔}

例えば間引きの間隔を 4 にすると、データサイズは4分の1になる。

追記 2015/06/10 ----
GMT の psxy コマンドはバイナリファイルが読めることを知ったので、
sac からpsxy用バイナリに変換するプログラムを追加した。
単精度で書き出しているので、psxy を使う際に "-biS" オプションを付ける。

現在、使用可能なクラスは

・アスキー → sac
 AsciiToSac <asciiFileName> <sacFileName>

・KiK-netアスキー → sac
 KiknetToSac <KiknetFileName> <SacFileName>

・sac → アスキー
 SacToAscii <sacFileName> <asciiFileName> (sampleStep)

・sac → アスキー(0位相バタワース型バンドパスフィルタをかける)
 SacToAsciiBP <sacFileName> <f1> <f2> <order> <asciiFileName> (sampleStep)

・sac → アスキー(バンドパスフィルタ適用後、2乗エンベロープにする)
 SacToAsciiEnv <sacFileName> <f1> <f2> <order> <asciiFileName> (sampleStep)

・sac → バイナリ(単精度)
 SacToBin <sacFileName> <binaryFileName> (sampleStep)

・sac → バイナリ(0位相バタワース型バンドパスフィルタをかける)
 SacToBinBP <sacFileName> <f1> <f2> <order> <binaryFileName> (sampleStep)

・sac → バイナリ(バンドパスフィルタ適用後、2乗エンベロープにする)
 SacToBinEnv <sacFileName> <f1> <f2> <order> <binaryFileName> (sampleStep)

(sampleStep) はオプション(省略は 1 と等価)。

----

2012年6月26日火曜日

GMTでプロットするときにデータを区切る

例えば1つ目のデータ(data1.txt)が
1 5
2 3
3 8
2つ目のデータ(data2.txt)が
1 9
2 6
3 1
となっている場合を考える。
このとき、
psxy data1.txt -JX4/4 -R0/4/0/10 -Ba2f1::nSeW -W1p/0/0/0 -P -K > out.ps
psxy data2.txt -J -R -W1p/0/0/0t6_4:0 -P -O >> out.ps
とすると


となる。

この2つのデータを1つにまとめたファイル(data.txt)をプロットしたい場合には
1 5
2 3
3 8
>
1 9
2 6
3 1
のフォーマットでデータファイルを作成し、psxy のオプションに -M を付ける。
ちなみに、この区切りの > はデフォルトらしいけど、変え方は知らない。。

psxy data.txt -JX4/4 -R0/4/0/10 -Ba2f1::nSeW -W1p/0/0/0 -M -P > out.ps
とすると、さっきと同じような図ができる。線の種類は変えられないみたい。


この区切りを指定しなかった場合には、すべての点が一筆書きでつながって一本の線になってしまう。