« ん〜、そうかな〜 | トップページ | 2TBやっと出ましたねえ〜 »

2009年1月27日 (火)

コマンドラインからPerlでXPath検索 その2

今日久々に自分のブログを見たら検索フレーズランキングで「コマンドライン xpath」が1位になっているではありませんか。実は以前に載っけたヤツは時間がなかったこともあって/usr/local/binにぶち込んであるスクリプトをコマンドライン用に動くよう速攻手直ししたものだったので間抜けなところもありました。で、直そう直そうと思いつつも今日までサボっていましたが、被害が広がるのを恐れて今直しました
前回のとは違ってcatを使いました。単純にXML_DOCフォルダにあるXMLファイルからタグがdivでクラスがSverigeのものを拾ってタグを消して出力するだけです。


for i in /Users/misabazooka/Desktop/XML_DOC/*.xml; { cat $i | perl -MXML::LibXML -0777e
'$hoge=<>;
$xmlp=XML::LibXML->new->parse_string($hoge);
$sagashimono="//div[\@class=\"Sverige\"]";
$nodeset=$xmlp->findnodes($sagashimono);
foreach $node($nodeset->get_nodelist){
$node=$node->textContent;$node=~s/\n/ /g;print "$node\n\n";
}'
; }

太字のところを交換すれば使えますが、XPathをもっといじりたい方はこちらを参照してください。

モジュールがインストールされていないと動かないのは同じです。ご参考までにどうぞ。

追記 閑話ですが、実は仕事用のコンピュータが全てマルチコアもしくはマルチプロセッサになったので、マシンのプロセッサパワーをスクリプトで100パーセント使おうと思ってPerlのthreadsを使って実験してみました。200以上のファイルの処理をそれぞれ別スレッドを立てて処理するスクリプトとthreadsを使わずに繰り返し文で同数のファイルを処理するスクリプトを書いての単純な速度比較です。確かにthreadsを使ったスクリプトではマルチコアでプロセッサパワーが全開になりましたが、トホホなことに一つのコアしか使わない繰り返し文のスクリプトの方が処理速度は速かったです。まあ、threadsはそういう風に使うものではないと言われてしまえばそれまでですが...なんかXgridでの失敗を思い出してしまいました...

追記2 使うモジュールを一つだけにして例を簡略化しました。ただ単に検索するだけだったらこの方がいいかなと思います。

追記3 <>をそのまま書いていたので表示されない部分がありました。ごめんなさい。修正のためにperlの中の部分を少し改行で区切っておきました。実際には改行は全く入りませんので留意してお使いください。

« ん〜、そうかな〜 | トップページ | 2TBやっと出ましたねえ〜 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: コマンドラインからPerlでXPath検索 その2:

« ん〜、そうかな〜 | トップページ | 2TBやっと出ましたねえ〜 »

2019年9月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

最近のトラックバック