2005-03-28
_ 歓迎会
今年も新人さんを迎える時期になってきたわけですが,どういうわけか私が新人の歓迎会の幹事をやることに….入社3年目にしてはじめての幹事か.というわけで普段出席率の悪いうちの部署だから,新人含めて20人集まればいいほうかなぁ,とか思ってたら予想に反して30人も出席とは….そんな大人数で会場予約してないし….ひとまず店に30人でいけるか確認.ぎりぎりですねぇなんていわれながらもなんとか会場を確保.つくずくこういう仕事はむいてないなぁと思ったのでありました.
2005-03-27
_ lftpでミラーリング
自宅サーバのtDiaryのデータをxreaのサーバにバックアップとしてミラーリングするのに,ftpを使ったバッチ処理にしようとしたのですが,少し調べてみたらlftpという便利なCUIのftpクライアントがあることを知りました.
コマンドラインでftpを利用する際,意外に不便なのがTab補完がきかないことです.lftpでは普通にシェルで利用しているTab補完が利用できます.これは結構便利です.それ以外にもタイムスタンプの新しいものだけ更新とか,正規表現で対象のファイルを指定できるなど機能が豊富です.Landscapeでlftpについて紹介されているので参考になりました.
2005-03-25
_ whileとawk
あるテキストファイルの各行末にタイムスタンプをシェルスクリプトで付加したいのだがどうしたらいい?という質問を受けて単純にwhile文を作成してみたら1000件処理するのに11秒もかかっていたので,これはまずいと少し調べてみました.シェルスクリプトでのテキスト処理としてはsedやawkが定番です.今回はこの要望をawkを使って実現してみました.
まずとっても遅いwhile版のソースは以下のようになります.
#/bin/sh while read LINE do echo $LINE `date +%Y-%m-%d-%H.%M.%S` done < hoge.txt
このスクリプトで1000行のファイルを読み込み,行末にタイムスタンプを付加したときの実行時間は,
$ time while.sh real 0m11.78s user 0m2.33s sys 0m7.56s
次にawkを使って同様の出力結果を表示する場合は,
awk '{cmd="date +%Y-%m-%d.%H%M.%S";cmd|getline d; print $0,d}' hoge.txt
このスクリプトで1000行のファイルを読み込み,行末にタイムスタンプを付加したときの実行時間は,
time awk '{cmd="date +%Y-%m-%d.%H%M.%S";cmd|getline d; print $0,d}' hoge.txt
real 0m0.19s
user 0m0.03s
sys 0m0.13s
明らかに実行時間に差があることがわかりました.10000件処理してもawkの場合は1秒程度ですんだので,これは大きな差です.ただ問題はタイムスタンプが全て同じになってしまうということ.この辺をどういう風に処理したらいいのかなぁ…