awkによるテキスト処理

[テキスト処理のお手伝い] [perlによるテキスト処理] [便利なツール]

はじめに

awkを使うと、テキストファイルを加工したり、テキストデータベースから 必要なデータを取り出したりすることが簡単にできます。 ここでは、簡単かつ応用性のあるawkの小さくて実用的な プログラムを紹介します。

注意


awkによる実践的プログラム

機能 解説 実行環境1 実行環境2
ナンバリング テキストファイルの一行ごとに番号を付けるプログラムです。 単純なプログラムですが、これだけでもawkの概要は理解できるでしょう。

テキストファイルの反転 これは、テキスト処理になじみのない人にとっては役立つプログラムかもしれません。 やっていることは単純です。

フィールド抽出 これは、表計算ソフトに慣れている人なら簡単にできることです。 でも、テキスト処理になれると、表計算ソフトでは面倒なことも 簡単にできるようになります。ここで紹介している他のプログラムの考え方 を組み合わせて応用すると、本当にいろいろなことができるようになります。

ダブルコーテーションマークの削除 表計算ソフトで表をテキストとして出力するとき、 各フィールドがダブルコーテーション(二重引用符”) で囲まれてしまうことがあります。 これは、表をテキストファイルとして出力する 形式がカンマ区切りファイルであることと関係があります。 各フィールドをカンマで区切る場合、フィールドの中身にカンマが ある場合を考えてこのような仕様になっていると思われます。 しかし、awkなどで計算する場合には、ダブルコーテーション があると正しく計算できない場合もあります。もちろん、このテキスト をもう一回表計算ソフトで読み込み、出力しなおしてもよいのですが、 ここでは、awkにより実現します。客先から大量のダブルコーテーション つきCSVテキストが送られてきてしまった場合などに役立つでしょう。

最大、最小、平均 これも、表計算ソフトに慣れている人ならそちらのほうがよいと感じるかもしれません。しかし応用は無限です。

順序のランダム化 テキストファイルを順番に並べ替えるには、DOSやLinuxのsortコマンド で簡単にできます。しかし、場合によってはできる限り順序をぐちゃぐちゃ にしたい場合もあるでしょう。その場合はプログラムを組む必要があります。

ファイルの分割 巨大なデータファイルを複数の人で分け合って作業する場合など、 一つのファイルを複数に分けることが必要な場合に有用なプログラムです。

レコード連結(1)要素数が固定の場合
レコード連結(2) 要素数が可変の場合
あるソフト開発会社のサイトに、このような処理を1000件 あたりいくらで請け負う、との 広告を見つけて驚いたことがあります。こんな処理でお金をとるなんて (しかもプログラム開発費用ではなく、件数単位で!) 、 と思いましたが、それぐらい処理方法がわからず悩んでいる人も多いのでしょう。

頻度カウント (一般データ対応) 重複データを含むテキストデータファイルの各データの個数を 数えるプログラムです。 あらかじめソートしていない一般のデータファイルに対応するため 「連想配列」というawkの特徴を利用しています。

頻度カウント (ソート済みデータ対応) 重複データを数えるプログラムです。 あらかじめソートしてあることを前提にしているため、 他の手続き型言語に置き換えることも簡単です。

半角カタカナチェック パソコンの世界ではやっと半角カナが消えたと思っていたら、 携帯電話のせいで復活してしまいました。 しかし、データ処理の上ではやはり半角カナはトラブルの元ですので、テキスト中の半角カナの有無をチェックするプログラムを用意しました。

半角カタカナ修正 チェックだけでは間違いのもとですので 自動的に修正するプログラムも用意しました。 しかし、銀行口座のカタカナのように、小文字カナ(ュ、ィ等)が 大文字に変えられてしまっているデータは復元できません(もとの情報が 失われているので)。 ちなみに当社の取引口座名も「テイ−ケン」であって「ティーケン」 ではありません。 この程度はまだいいのですが、「エヌテイ−テイ−」だと 一瞬とまどいますよね。 早くこの世から半角カナが無くなってほしいものです。 なお、Cygwin版のgawkは正式にはSJISの正規表現をカバーしていませんが、 半角カナは1byteのためこのプログラムは動きます。

校正支援
SJIS正規表現対応済みGAWKのみ
少し本格的なプログラムです。複数の人間で文書を作成すると、どうしても表記のゆれ、表現の不一致などがでてきてしまいます。 このプログラムは校正時の作業漏れを少しでも減らすために作られました。 このプログラムは正規表現を多用しているため、 Cygwin版gawkでは動作しません。

×

htmlのチェック

かなり本格的なプログラムです。 htmlをテクストエディタで書いていると、どうしてもタグ忘れや位置の誤りが出現してしまいます。 本格的なチェックをするには、HTML-lint などを利用すればいいのですが、もっと単純なミスだけ手早く修正したい場合もあると思います。このプログラムは単純なので、ちょっとした手直しでhtml以外のマークアップ言語にも応用可能になっています。

注:動作確認はWindows XP 上で
実行環境1: Cygwin に含まれるgawk(バージョン3.13)
実行環境2: 単体のgawk(SJIS正規表現対応、バージョン2.15, patchlevel 4 + multi-byte extension 1.03)
を利用して行っております。
また、実行環境1で動作可能なプログラムは すべてlinux(2.4.16-1g)上の gawk(バージョン3.10) でも動作することを確認しています。 詳細は こちら

awkの関数

便利な関数を集めていきます。

改行コードについて

awkやperlのスクリプトが動かないという場合、改行コードが正しくない場合があります。改行コードについては、 こちら を参照してください。

関連リンク

Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN