2010年9月12日

awkメモ:HTMLのtableに1行おきの背景色をつける

これは自分用のメモです。sed & awk使いには「また、車輪を再発明しとってやがな〜」とそしられそうなものばかりでしょう。

先の記事でつくったような単純なtableの行やセルに体裁をつけます。まずは、1行おきに背景色を指定し、しかも左端の第1列には色をつけない...

BEGIN {
  RS="</tr>"
  FS="<td>"
}

NR % 2 == 1 {
  print $0 RS
}

NR % 2 == 0 {
  print $1\
  "<td>"$2\
  "<td style=\"background-color:#ccffff;\">"$3\
  "<td style=\"background-color:#ccffff;\">"$4\
  "<td style=\"background-color:#ccffff;\">"$5\
  "<td style=\"background-color:#ccffff;\">"$6\
  "<td style=\"background-color:#ccffff;\">"$7\
  "<td style=\"background-color:#ccffff;\">"$8\
  RS  
}

もとのHTMLのソースで、1レコード=複数行にしているので、レコードセパレータ(RS)とフィールドセパレータ(FS)でちょっと無理をさせてます。そのため、$1が「<tr>」に、表の1列めが$2、2列めが$3...と気持ち悪いことになってしまいました。

</td>と改行、インデントは$2〜$8の末尾にそれぞれ入ってます($8にはインデントは入っていませんが)。

1レコード=1行だったもとのタブ区切りテキストを直接、awkに喰わせる方が簡単かもしれません。

レコード番号(NR)の剰余(演算子%)で場合分けをしてますから、「n行おき」の指定も可能です。(↑これが、このスクリプトのミソですね)

なお、上の例では1列目以外は同じ背景色ですが、列毎に書式を指定できますね。

まあ、とりあえずの間に合わせスクリプです (^_^;;

-

sedメモ:タブ区切りテキストからHTMLのtableへ

これは自分用のメモです。sed & awk使いには「また、車輪を再発明しとってやがな〜」とそしられそうなものばかりでしょう。

s#^#<tr>\
  <td>#
s#$#</td>\
</tr>#
s#\t#</td>\
  <td>#g

InDesignで組んだ表を選択してテキストに書き出すと、タブ区切りものが得られますが、それをHTMLでの表に書き直す、その作業の一部。<tr>と<td>タグを書き込む付けるsedスクリプトです。
1レコード=1行の方が後の処理が楽そうですが、出来上がるHTMLソースが読みやすくなるようインデント・改行を加えて、1レコード=複数行の書式にしてます。


こんな風です。

タブ区切りテキスト:
  学校数 給食実施校  未実施校 備考
   完全給食 ミルク給食  
 神戸市 85 2* 83  75校で弁当販売 *は夜間中学
阪神 尼崎市 20 1**  19 **は夜間中学での補食給食
 西宮市 20 20   
 芦屋市 3   3 
これを上のスクリプトで処理すると:
<tr>
  <td></td>
  <td></td>
  <td>学校数</td>
  <td>給食実施校</td>
  <td></td>
  <td>未実施校</td>
  <td>備考</td>
</tr>
<tr>
  <td></td>
  <td></td>
  <td></td>
  <td>完全給食</td>
  <td>ミルク給食</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td></td>
  <td>神戸市</td>
  <td>85</td>
  <td>2*</td>
  <td>83</td>
  <td></td>
  <td>75校で弁当販売 *は夜間中学</td>
</tr>
<tr>
  <td>阪神</td>
  <td>尼崎市</td>
  <td>20</td>
  <td>1**</td>
  <td></td>
  <td>19</td>
  <td>**は夜間中学での補食給食</td>
</tr>
<tr>
  <td></td>
  <td>西宮市</td>
  <td>20</td>
  <td>20</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td></td>
  <td>芦屋市</td>
  <td>3</td>
  <td></td>
  <td></td>
  <td>3</td>
  <td></td>
</tr>

前後に<table><tbody>タグを書き込めば、とりあえず表の形になります:
学校数 給食実施校 未実施校 備考
完全給食 ミルク給食
神戸市 85 2* 83 75校で弁当販売 *は夜間中学
阪神 尼崎市 20 1** 19 **は夜間中学での補食給食
西宮市 20 20
芦屋市 3 3

(あ! こりゃ、例がまずかった! 兵庫県内では学校数で53%、自治体(設置者)数で75%が中学校完全給食をやってます。ミルク給食だけの神戸とか実施していない芦屋なんかは少数派なのです)

行や列ごとに背景色など書式をつけたり、数字のセルだけ右寄せにしたり...など<td>内への書式指定はawkで半自動化できるはず。それは後ほどアップします。

-