Sumio Ebisawa
ebisa****@aa*****
2005年 1月 3日 (月) 03:41:14 JST
海老澤です。お世話になります。 石倉様、シェルスクリプトありがとうございます。いただいたアドバイスを 元に、私なりにまとめた結果が下記の通りです。 前提: ・ログファイルは予め参照元と日付を削除し、IDとURLで集計しておく 前: 001 /a.html 2月1日 www.yahoo.co.jp (フィールド名はID/URL/日付/参照 元) 後: 001 /a.html 1 (フィールド名はID/URL/PV) ・処理ファイル名は「uniq.xt.gz」、結果は「result_all.xt.gz」とする ・途中処理は全て「tmp」以下で行う。将来的には、このディレクトリを RAMディスクにすることで、更なる処理能力向上が期待できる。 (排他制限の課題は残っていますが) 感想: ・検証用サーバはCeleron600MHzの古いマシンですが、musashiが 非常に高速で動作することに驚きました。特にコマンドを複数掛け 合わせたときはUnixコマンドの約7倍以上の処理能力を発揮します。 その他: ・XMLヘッダ内のフィールド名を変えるコマンドが見つからなかったので 一部Unixコマンドを使用しました。 スクリプト(等幅フォントでご覧願います) -- #!/bin/sh #################################################### ### 下準備 #################################################### rm -fr tmp/* #################################################### ### 処理開始 #################################################### ### ID有りとID無しに分ける xtselstr -f ID -v "empty" -u tmp/nId.xt -r -i uniq.xt.gz -o tmp/wId.xt -T tmp #################################################### ### ID有りの処理開始 #################################################### ### 全体のページビュー数とユニークユーザ数を算出 #ID有りのページビュー数(全て)を求める xtcut -f PV -i tmp/wId.xt | xtsetchr -v all -a URL | xtagg -k URL -f PV -c sum -o tmp/wId_all_pv.xt -T tmp #ID有りのユニークユーザ数(全て)を求める xtcut -f ID -i tmp/wId.xt | xtsetchr -v all -a URL | xtcount -k URL -a UU -T tmp | xtcut -f URL,UU -o tmp/wId_all_uu.xt #一つのXMLテーブルにまとめる xtjoin -k URL -m tmp/wId_all_pv.xt -f PV -nN -i tmp/wId_all_uu.xt -o tmp/wId_all_all.xt -T tmp ### URL別のページビュー数とユニークユーザ数を算出 #ID有りのページビュー数(URL別)を求める xtcut -f URL,PV -i tmp/wId.xt | xtagg -k URL -f PV -c sum -o tmp/wId_url_pv.xt -T tmp #ID有りのユニークユーザ数(URL別)を求める xtcut -f URL -i tmp/wId.xt | xtcount -k URL -a UU -o tmp/wId_url_uu.xt -T tmp #一つのXMLテーブルにまとめる xtjoin -k URL -m tmp/wId_url_pv.xt -f PV -nN -i tmp/wId_url_uu.xt -o tmp/wId_url_all.xt -T tmp ### 全体とURL別の2つのXMLテーブルをマージする xtcat -n -i 'tmp/wId_*_all.xt' -o tmp/result_wId.xt #################################################### ### ID無しの処理開始 #################################################### ### 全体のページビュー数を算出 ### ID無しのページビュー数(全て)をまとめる xtcut -f PV -i tmp/nId.xt | xtsetchr -v all -a URL | xtagg -k URL -f PV -c sum -o tmp/nId_all_pv.xt -T tmp ### URL別のページビュー数とを算出 #ID有りのページビュー数(URL別)を求める xtcut -f URL,PV -i tmp/nId.xt | xtagg -k URL -f PV -c sum -o tmp/nId_url_pv.xt -T tmp ### 全体とURL別の2つのXMLテーブルをマージする xtcat -n -i 'tmp/nId_*.xt' -o tmp/result_nId.xt #################################################### ### 全てを結合する #################################################### ### NoIDのフィールド名「PV」を「PV_noID」に変更 sed s/PV/PV_nID/ tmp/result_nId.xt > tmp/result_nId_tmp.xt rm -f tmp/result_nId.xt mv tmp/result_nId_tmp.xt tmp/result_nId.xt ### ID有りとID無しを連結する xtjoin -nN -k URL -m tmp/result_nId.xt -f PV_nID -i tmp/result_wId.xt -T tmp | xtnulto -f UU,PV,PV_nID -v 0 | xtcal -c'round($PV_nID*($UU/$PV),1)' -a UU_nID | xtcal -c'($PV+$PV_nID)' -a PV_final -T tmp | xtcal -c'($UU+$UU_nID)' -a UU_final -T tmp | xtcut -f URL,PV_final,UU_final | xtnulto -f PV_final,UU_final -v 0 | xtsort -k PV_final%nr,UU_final%nr -o result_all.xt.gz -T tmp #################################################### ### 後片付け #################################################### rm -fr tmp/*