使用上の注意


  1. シェル(動作環境)
  2. egrep
  3. fetch
  4. ログのファイル名
  5. gnu-win32
  6. sort -n

シェル(動作環境)

 多くの大学などでは学生に使える端末はWindows95/98、または少し本格的なあたりでSunOS(Solaris),BSD/OS(またはそれにぶら下がるX端末)あたりでしょうか。理系の大学の研究室ならばFreeBSDやLinux、場合によってはIRIXやHPUXのサーバもあるでしょう。私が作ったスクリプト群は、それらのUNIX系のOSとその上で動作するshが必要となります。
 開発・動作確認を行ったのはFreeBSDの/bin/shですが、Bourne shell系のsh(shやbash)なら動作すると思います。問題になるとしたらegrepの有無、引数の違い程度でしょう。head,tail,sed,awk,expr,teeは基本的な使い方しかしていないのでたぶん大丈夫です。
#Windowsでも、gnu-win32のcygwinパッケージ(usertoolsの方で良さそうです)をインストールすればget.sh以外のスクリプトは動作するみたいです。(logsplitter.shをテストしてみましたが、しっかり動いてます。 ただし、sh.exeを/bin/shにコピーするのを忘れないように) gnuplotもWin32版があるので、fetchを必要とするget.sh以外はたぶん全部動きます。fetchの代わりにwget.plあたりを使えばperl32の力で全て動くようになるかも?

page menu

egrep

 FreeBSDに入っているgrepなので、GNUのgrepです。gnu-win32には当然含まれていますし、他のOSでもほとんどインストールされているでしょう。もしなかったら、どっかそこらへんの公開ftpサーバで/pub/GNUの下を漁ればでてきます。(たとえばftp://ftp.iij.ad.jp/pub/GNU/) GNUプロジェクトのありがたいところは、configureスクリプトがあるのでsh configure;make;make installであっという間にバイナリが出来てしまうこと、ほとんど全ての環境に適応していることです。ですから、egrepがなかったらインストールしてしまうというのも一つの手ではあります。

 という話は置いておくとして、egrepが無く、インストールも出来ない場合です。egrepはgrepの機能拡張版ですが、私が使っている機能は拡張機能というわけでもないのでただのgrepでも大丈夫です。次の2点を必要に応じて変更してください。

-n
 -nオプションは、パターンがマッチした行数を返します。man grepしてそれっぽいオプションを探し、変更してください。line numberがどうとか書いてあるのがそうです。
-e
 パターンを明示的に示すオプションです。念のために使っているだけなので、はずしてもかまいません。

page menu

fetch

 指定されたURLのファイルを取得するプログラムで、FreeBSDのパッケージに含まれます。sourceもあるのでBSD/OSに移植してみようかと思いましたが、結構面倒だったのでやめました(^^; 再帰的にファイルを取得する訳ではないので、いちいち移植作業するよりも自分で書いた方が早そうでしたし。まぁ、proxyに対応したりユーザ認証に対応したりといった汎用の機能をあきらめればっていう制約はつきますが。それはさておき、任意のURLが指すファイルを取得するperlスクリプトというものは既に幾つかが配布されています。networkライブラリをCPANあたりから入手する必要がありますが、使えないことはありません。しかし、私はperlは好きじゃないんです:-( というわけで、perl対応は遅れています。

 一応、fetchで使ったオプションの説明です。

-b
 TCPの実装にbugのあるHTTPサーバに対応します。無くても平気かも。
-t
 これもbug対応。
-R
 なにかの理由で転送が失敗した場合でも、そこまでのデータを保存します。
-o
 出力するファイル名を指定します。これがないとちょっといやなことに……。

page menu

ログのファイル名

 get.shで番号.htmlというファイル名で保存しているようにした関係上、他のスクリプトもこれにあわせたファイル名で動作するようになっています。別の名前でログを保存している場合は、スクリプトを手直しするかファイル名をあわせて下さい。

page menu

gnu-win32

 gnu-win32とは、フリーソフトで有名なGNUプロジェクトのWin32向けの物です。bashやらgccやらいろいろとあるので便利です。なんといっても、gccが使えるのが一番嬉しいですが。

 試験的にgccでコンパイルしたwin32のバイナリも登録してみますが、実行にはCygwin(Cygnus)の実行環境が必要です。プログラム開発を行う場合はfull.exe(約15MB)、ツールを使うだけならばusertools.exe(3MB)をダウンロードしてインストールして下さい。

page menu
 

sort -n

 sortというのは名前の通りに文字列(数値)を並べ変えるプログラムで、UNIX系のOSに限らず、MS-DOSなどにもあります。(機能が少ない場合もありますが) ですが、基本的に文字コードの大小で区別するため、思うように並べ変えてくれないこともあります。例えば、1 2 3 4 5 6 7 8 9 10という文字列を並べ変えると、1 10 2 3 4 5 6 7 8 9という順番になってしまいます。

 これを防ぐのが目的の文字列を数値として扱う"-n"オプションです。このオプションを指定した場合、データは数値として扱われるので1 2 3 4 5 6 7 8 9 10という順番で出力されます。

 しかし、この方法が通用するのは、頭になにもついていない場合です。たとえば、hoge1.html hoge2.html .... hoge10.htmlというファイルを順に出力したい場合、-nオプションは使えません。先頭のアルファベットが邪魔になるのです。ですが、一応、対応策はあります。UNIXの強力なパイプライン処理と豊富な命令を活用するのです。この場合、ストリームエディタであるsedの文字列置換を利用して接頭語であるhogeを削り、並べ変えます。shの場合、

PREFIX="hoge"
for TARGET in `ls -1 ${PREFIX}[*].html | sed "s/${PREFIX}//" | sort -n`
do
cat ${PREFIX}${TARGET}
done
とすることで目的を達成できます。(この例の場合、hoge1〜10.html以外にhoge12.htmlのようなものがあると引っかけてしまいます。

page menu
シスプリの小部屋へもどる