AWKコマンドを利用してテキストファイルからHTML文を自動生成する
Windowsでは絶対にできない(絶対かと言われるとあまり自信ないですが。。)テキスト整形処理がLINUXでは簡単にできます。AWKコマンドです。
これを利用して、あるテキスト文書をHTMLの表を自動生成してみましょう。![]()
AWKでよく使う基本的な書式は、
awk '{print $1}' textfile
です。この場合、textfileというファイル名のファイルからスペースで区切られた列の1列目($1と指定する)のみを取り出して表示せよ、という意味です。例えば、textfileの中味が
TOM 59
JANE 40
ALEX 42
なら、
TOM
JANE
ALEX
と表示されます。(2列目の数字は表示しない)
カンマ区切りのテキストファイル(CSVファイル)なら、
awk -F, '{print $1}' textfile
というふうに『-F, 』を『awk』の後に付けて、『
'{print~』以下を書きます。
HTMLの表を作るためには各要素(列)の先頭に<td>と</td>を入れ、行の先頭には<tr>、行の終わりには</tr>を入れます。この場合、
awk '{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3"</td></tr>"}' textfile.txt
のようにすれば一発です。
例えば、以下のようなテキスト文書があるとします。
1 取り付け 19
2 etc 15
3 googlesitemaps 13
4 etc取り付け 9
5 coolpix5600 9
6 movabletype 9
7 インプレッサ 9
8 吐血 4
9 etc 4
10 coolpix5600 4
これは、このサイトの現時点での検索キーワードの多い順のランキングなのですが、PHP-STATSというアクセス解析ツールで表示されたものをそのまま選択してコピーしたものを貼り付けたものです。
例えば、これをブログで検索キーワードランキング、として載せたい場合、まず<table>タグで表を組んで表示したいと思うでしょう。(このままでもいいですが、なんか分かりにくいですよね?
)
このテキスト文書を仮に『textfile.txt』として、保存して、LINUX側に持っていき(LINUX側で直接viエディタなどで貼り付けてもOK!)、
awk '{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3"</td></tr>"}' textfile.txt
とするだけで、
<tr><td>1</td><td>取り付け</td><td>19</td></tr>
<tr><td>2</td><td>etc</td><td>15</td></tr>
<tr><td>3</td><td>googlesitemaps</td><td>13</td></tr>
<tr><td>4</td><td>etc取り付け</td><td>9</td></tr>
<tr><td>5</td><td>coolpix5600</td><td>9</td></tr>
<tr><td>6</td><td>movabletype</td><td>9</td></tr>
<tr><td>7</td><td>インプレッサ</td><td>9</td></tr>
<tr><td>8</td><td>吐血</td><td>4</td></tr>
<tr><td>9</td><td>etc</td><td>4</td></tr>というのが作られます。
これに、先頭に『<table>』、最後に『</table>』というのを付けるなら、
awk 'BEGIN{print "<table>"}{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3"</td></tr>"}END{print "</table>\n"}'とすれば、最初と最後にTABLEタグの始まりと終わりが付加できます。
ファイルに吐き出す場合は、最後に『> ファイル名』を入れればOKです。
awk 'BEGIN{print "<table>"}{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3"</td></tr>"}END{print "</table>\n"}' > newtext.txt
このnewtext.txtの中味はこんな感じになります。
<table>
<tr><td>1</td><td>取り付け</td><td>19</td></tr>
<tr><td>2</td><td>etc</td><td>15</td></tr>
<tr><td>3</td><td>googlesitemaps</td><td>13</td></tr>
<tr><td>4</td><td>etc取り付け</td><td>9</td></tr>
<tr><td>5</td><td>coolpix5600</td><td>9</td></tr>
<tr><td>6</td><td>movabletype</td><td>9</td></tr>
<tr><td>7</td><td>インプレッサ</td><td>9</td></tr>
<tr><td>8</td><td>吐血</td><td>4</td></tr>
<tr><td>9</td><td>etc</td><td>4</td></tr>
</table>
ここでのポイントは、BEGIN{(始めにしか行わない処理)}とEND{(終わりにしか行わない処理)}を付けることで、簡単にこのような整形ができるのです。
少ない行数のファイルだと、手作業でタグを一個一個入れていってもいいですが、何十行、何百行以上ある場合は、この方法を是非お試し下さい![]()
AWKにはAWKプログラミングという名前もあるほど、もっと高度なこと(条件分岐処理など、プログラミング)もできます。自分が必要になった時にまたアップしま~す![]()






