- 締切済み
awkのパターンマッチングについて。
特定web siteからfileをdownload後にファイルのmd5値 およびsha-1値をtextに抽出(出力)させたいと考えてます。 全体の流れとしては以下になります。 (1)web pageをfileとして保存 (2)htmlをtxtに変更しtext editerにてgrep ※grepに使用するキーはhttpsにすると下記情報が一行ず つ出力されます。 <tr><td><a href="https://download.xxxxxxxxxxxxxxxx"> href="#" title="MD5|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" href="#" title="SHA-1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (3)上記をキーとしてawkからテキストに出力 ご質問させていただきた点は(3)のawkの部分です。 Forawk.exeを使用して実行したいのですがパターンマッチングが分かりません。 以下key選択方法についてご教示の程お願いします。 (1) httpsから始まるリンクを$1 (2) "MD5|"から始まる32行の乱数を$2 (3) "sha-1|"から始まる40行の乱数を$3 print $1 " " $2 " " $3 でうまく表示できるのではないかと考えています。 その他良い案等ありましたら合わせてご提示の程お願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
> 2)htmlをtxtに変更しtext editerにてgrep > ※grepに使用するキーはhttpsにすると下記情報が一行ずつ出力されます。 とありますが、貼り付けられている出力例は一行には見えません。 本当に貼り付けられている通りに出力されるのなら >href="#" title="MD5|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >href="#" title="SHA-1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" はひっかからないですよね。 また、前処理としてエディターでgrepかけないでも直接awkでやっちゃえば良いように思うのですが。 >ご質問させていただきた点は(3)のawkの部分です。 自分が質問する立場のときは「ご質問」とはしないんじゃないですかね。
- sholmes
- ベストアンサー率81% (89/109)
forawkというものは知りませんが、gawk前提ツールのようなのでgawkを使いました。 http://ideone.com/arTJ9 正規表現や行番号等は、利用される環境や正式なデータに適宜合わせて下さい ※このやり方が良いかどうかは自分でもわかりません。
パターンマッチだと文字列を見つけることはできても、取り出すことはできないので、そこはコードに頼らざるを得ません。見た目にきれいではないですが、matchかindex関数でhttpsなりの位置を調べ、そこを起点にsubstr関数で取り出すしかないでしょう。特に(2)(3)は長さが決まっているため、ベタに固定長で引っぱって来られますから簡単です。問題はURLですが、これはhttpsが含まれる行の長さを見るか、行末の">の位置を調べるかのいずれかで取り出す長さの特定が可能です。 $1,$2はawkによってシステム変数FS(デフォルトはスペース)で指定されたキーごとに分解された語が格納される変数なので、今回はそんなものを書いても通用しないです。