電子計測
2001.7.13
無線LANの利用を希望する場合には申し出ること。詳細については口頭で紹介する。
全学を対象とした授業アンケートを行うので、時間内に提出すること。詳細につい
ては、口頭で紹介する。
この授業の最後のテーマはawkである。UNIXの利用者は商用アプリケーションなど を使わずに自分でスクリプトを組んだり、簡単なコマンドの組合せにより処理を行 うことを好む傾向があった。理由は、基本的にはプログラマが使用するOSであった からであるが、そのため、ワープロや表計算ソフトなどはあまり普及せず、TeXを 基本として文書作成を行う伝統がある。
近年のLinuxの広まりにより、デスクトップ環境の充実が急速に成し遂げられたが、 それでも、コマンドやスクリプトの組合せで処理をする環境は残されている。 awkもその典型的な例で、テキストファイルでデータを作成すれば種々の処理が行 えるので、ちょっとした作業に重宝する場合がある。教科書の例を試してみて、感 覚をつかんでおいて欲しい。
awkの応用例として、TeXと組み合わせて、データ処理をしたものを表組することを 実習してみる。使用するデータは以下のようなテキストデータとする。
名前 英語 数学 物理
島根太郎 65 80 85
松江花子 90 70 75
出雲次郎 80 80 90
川津三郎 85 75 60
学園一郎 80 90 95
ここで、項目間の区切りはスペースである。
学生ごとの平均点を求めて表に出力することを行う。awkによ る計算処理自体は、比較的単純で上記のデータがdata.txtというファイル名だとす ると、ターミナルにおいてコマンドラインで以下のように処理できる。
$ awk '{print ($2+$3+$4)/3}' data.txt
結果は一行目の文字だけのところで0が表示される以外は、ちゃんと平均点計算が できているはずである。これを表データにするためには、コマンドラインからでは 面倒なので、スクリプト(ファイル名はとりあえずscriptとする)を作成してみる。 内容は以下のようにしてみよう。
{
if ($2 <= 100) {
print $1 $2 $3 $4 ($2+$3+$4)/3
}
}
これをターミナルから実行してみよう。
$ awk -f script data.txt
結果は表示されるが、データがくっついて見づらいと思う。後は、整形である。 TeXの表出力の形式を思い出してみよう。そうすると、以下のようなスクリプトが 考えられる。
{
if (NR ~ 1) {
print "\\documentclass{jarticle}"
print "\\begin{document}"
print "\\begin{tabular}{|c|c|c|c|c|} \\hline"
print $1, "\&", $2, "\&", $3, "\&", $4, "\& 平均点 \\\\ \\hline"
}
if (NR > 1 && NR < 6) {
print $1, "\&", $2, "\&", $3, "\&", $4, "\&", ($2+$3+$4)/4, "\\\\ \\hline"
}
if (NR ~ 6) {
print "\\end{tabular}"
print "\\end{document}"
}
}
急に複雑になったが、これまでに学習したC言語などの知識があれば大体のところ は分かるのではないだろうか。上記のスクリプトの意味は、もし、読み込んだデー タが一行目ならばTeXのプリアンブルを出力して、表の初めの部分と見出しを出力 する。二行目以降はデータを出力し、最後の行であれば、表以降のTeXの終りの作 業を行っている。以下に少し注意事項を挙げておく。
$ awk -f script data.txt > table.tex
のようにすれば、TeXファイルが生成されるので、いつもの作業によりxdviで表示 させることができる。
作業1
アンケートに回答して提出すること。
作業2
教科書にある awk の利用法を自分で試してみること。
作業3
TeXとの連携の操作についても試してみること。
授業の終わり頃に宿題用の課題を用意するので、指示があったらこのページを再読込して課題を見ること。