正直に書くブログ

2012年9月からフリーランス活動開始しました。
今後もマニアックでも有用な情報を提供出来るように頑張ります。

フリーウェア

awkの高速処理でCSVからファイル楽々抽出

awkがCSVファイルの編集や、情報抽出に非常に相性の良いツールだという事は、使ってみて初めて理解できることだと思いますので、ここでいっちょ例題というかやってみようと思います。

素材は、日本郵便が提供している郵便番号データとします。全国版をダウンロードして圧縮を解凍し、テキストエディタで開くと12万行以上あることが分かります。

MS-ExcelでもCSVファイルを読み込む事は出来ますが、Excel 2003までは6万数千行までしか読み込めませんので全国分は一度には作業出来ません。Excel 2007以降なら12万行でも読み込めますけどね。最近のバージョンであれば、無料で使用出来るオフィススイートOpenOfficeやLibreOfficeのCalcでも大丈夫です。

ファイルを開けるという話で言えば、表計算でも可能ですが、実際に抽出処理を行うとawkの処理能力の素晴らしさが一気にアピール出来ます。是非とも実際にやってみていただきたいです。

例えば、欲しい列(郵便番号、都道府県、市、町名番地)を抜き出すとしましょう。表計算ならKEN_ALL.CSVを開いて、不要な列を削除して、別名で保存という感じの手作業になると思います。PCのスペックによってはもっさりした動作になるかも知れません。

キャプチャ

awkなら下記のスクリプトを通すだけで一瞬です。

続きを読む

HTMLソースからawkで抽出系処理に際しての下ごしらえ

preタグで囲ってもライブドアブログが改行コード¥n等をメタ文字として扱うので一部全角文字で記しています。

ここんところawk熱が続いています。と言ってもawk言語の理解を深めるというよりは、Cygwin環境においての最小限のスキルでどう活用するかって方法の方に興味が向いています。

例えばこちらのエントリーページから、使っている画像のURLをゲットしようとした場合の処理です。

正直に書くブログ : awkとsedでテキスト加工の自動化

ブラウザの操作でもwgetでも良いので、ローカルにソースを保存して、テキストエディタで開いてみて下さい。見慣れている人にはなんてことないと思いますが、そうでは無い人にはこんなんどないすんねん!という感じかも知れません。

しかしこれ、実は規則性があるんですね。HTMLによるマークアップ記述にはタグという概念があり、<html>から</html>という感じで囲むルールがあります。この<>というルールを利用すると、awkで処理することが容易になります。まずその為の下ごしらえをします。

$ tr -d '¥n' < source.txt > mod1.txt

trコマンドで改行コード(¥n)を削除(-d)して、mod1.txtへ出力しています。これで改行の無い連なったソースが出来上がりです。Webブラウザは改行なしでも問題なく解釈してくれるのでページは開きます。テキストエディタで開くと改行はもちろん無く、TABやらスペースを使ったインデントやらでぐちゃぐちゃに見えますがPCが認識できるソースは維持しており破綻はしていません。

$ sed 's/</¥n</g' mod1.txt > mod2.txt

sedによる置換を実施します。"<"を"¥n<"に置換して改行(¥n)で区切るのが上記です。gオプションを忘れるとsedは最初にマッチした1箇所しか処理しないのでオプションを付けましょう。

出来上がったmod2.txtをテキストエディタで開いてみるとタグ毎に改行で分割出来ているのが分かるハズです。ここまで出来ると欲しい情報をawkで抽出する準備OKって事になります。

後はawkで処理する内容の記述次第なので、この記事にくどくど記すよりは、過去記事を呼んでいただきながら自分の求めている処理を独自に記していただくのが良いでしょうね。てことでコレ移行は省略しときます。

続きを読む

awkとsedでテキスト加工の自動化

さて、昨日awkを久しぶりに使ったのですが、現在勉強中のVisual Studio C#でWindowsアプリとして作ってみようと思っているツールを、awkとsedなら簡単に作れちゃうんじゃないか?って単純ロジックがイメージ出来てしまったので極単純に手続き型っぽくスクリプトに記してみました。全くプログラミングっぽくありません。

ここでネックはWindowsには標準ではawkもsedもコマンドがありません。後からフリーのコマンドをDLしてきてインストールすることも可能なのですが、wgetも使いたいし、ここまで来ちゃうともう煩わしいので、Cygwin(UNIXコマンド集みたいなアプリ)が使える環境でやってみました。

お題は、とあるグラビア画像系サイトからソースをwgetしてきて、ダウンロードリストを作ってしまうところまでとします。ダウンロードリストを元にwgetで画像ファイルをダウンロードする部分もスクリプトに含めれば、完全自動処理が出来てしまいますが、そこは今回の記事の範疇外とします。実際のところダウンロードの処理も自動で行う所まで、結構容易にできちゃいます。(気が向いたら後日記事にします)

画像ファイルが保存されているURLをテキストファイル1つにまとめられたら、そのURLリストをIrvine等のダウンローダーにインポートすれば、後は自動でDL出来ますね。ツールの組み合わせならちょっとした頭の切り替えで容易に実現出来ます。

Cygwinのインストールは楽勝だと思うので、今回は触れません。興味を持った方は是非Cygwinについて調べてみて下さい。Windowsというコンピュータがもっとコンピュータらしく使える上に身近になってくると思います。

ちなみに、Mac OSXはUNIXなので標準で同等のコマンドが使用出来るハズです。保証は出来ませんけど。さあ!Windowsユーザー達よ、Macユーザーに負けてられませんよ(w

続きを読む

awkスクリプトでパターンマッチングを複数回行う

知人から相談を受けてawkを久しぶりに使う事になりました。

最初はMS-Accessについての相談だったのですが、要件を聞いてみると元ソースはテキストファイル(CSV形式)ですし、Excelのイメージで言うと1つのセルに必要な情報がいくつも入っている状態なので、ExcelやAccessよりもawkで処理した方がスマートだと判断しました。

もっとも、置換機能によって不要な情報削除も必要なので私のスキルではawkだけでは無理でした。おそらくCygwinも入っていないWindows環境で処理されるのでsedも使えません。awk、テキストエディタ(正規表現置換)、sort、uniqの組み合わせで出来るだろうというイメージが出来ました。

sortはWindowsに有るコマンドですが、uniqに関しては無いので作るしか無いですね。もしくはユーティリティーを探してきてuniq抽出するか。

いずれにしても肝となるのは、やはりawkです。awkは簡単に使えて結果が得られる素晴らしい言語ですね。結構古いので廃れてる感はありますが、私的には最も助けてもらっているスクリプト言語です。

続きを読む

おーくの友だち+gawkでテキストファイルをマージ

今日は久しぶりにPCを使ったお仕事です。最近PCをあんまり仕事で使わなくなったので、メールチェックを始めスマートフォンばっかり使っています。

さて、今日はお仕事の関係であらかじめ手元に確保しておきたいファイルをネットで集めてくる作業をしようと思ったわけです。Web関係の仕事をする以前はHTMLの知識ですら概念的な学習で、実践が伴わなかったものですが、すっかりHTMLだけでなくJavascriptも一応読めるスキルが身についている様で、ソースを読んで規則性を見出し、URLリストを生成してダウンロードツールで自動的にダウンロードさせるべく横着する方法を考えます。

ちなみに未だに使っているダウンロードツールはIrvineです。Irvineは非常に優れたダウンローダーで、Windows 7でも不自由なく使用できるのがありがたいことです。

続きを読む
記事検索
月別アーカイブ
SEO的な実験
RSS

ブログランキング

track feed 正直に書くブログ
最新コメント
スポンサードリンク
QRコード
QRコード
  • ライブドアブログ