• twitter
  • facebook
文学・歴史資料のデジタル加工入門

awkの使い方【文学・歴史資料のデジタル加工入門8】 (木越 治)

●awkで何ができるか

まず、awkを使うと何が出来るのか、を説明しよう。以下、前回のサンプルデータを再度示する。

=======================================
9:10,趣味の会,11:40,2017,01,17
13:30,大学講義(大学院),15:00,2017,01,18
15:00,大学講義(学部),17:00,2017,01,18
14:50,大学特講,16:20,2017,01,19
19:00,コンサート,21:30,2017,01,19
12:00,読書会,14:30,2017,01,20
=======================================

これを、どう変形したかというと、一行目のデータを例にしていえば、

echo  9:10から趣味の会 >> 20170117.txt

というふうに出力させたわけである。
こういう作業を行う際に、awkは抜群の威力を発揮する。

●準備するものは?

準備するものは以下のふたつである。

1 加工したいテキストファイル(カンマ区切り形式)
2 スクリプトファイル

それぞれ順を追って説明しよう。

1 加工したいテキストファイル ── 特に、カンマ区切り形式ファイルについて

grep・sed・awk 等を利用するときには、もとのデータファイルがどんな形式になっており、どういう形式にしたいか、ということをしっかりと把握しておく必要がある。
いまのデータを例にすると、

9:10,趣味の会,11:40,2017,01,17

これがデータの一単位である。awk等のプログラム用に、わかりやすく言い換えると、

1つのデータは、改行(\n)によって区切られている。

という言い方になる。また、データの中味はどうなっているかというと、

開始時間,予定の内容,終了時間,開始年,開始月,開始日

というふうに並んでいる。これをプログラム的に言い換えると、

1つのデータは、6つのデータフィールドから成り、データフィールドの区切り文字は「,」である。

となる。

2 スクリプトファイル

awkは、データファイルを読み込み、スクリプトファイルに書かれている指示を読み込んだデータファイルに対して施し、その結果をはき出す、というのが動作の基本である。だから指示を書き込む前に、読み込むデータの形式がどうなっているか、また、はき出すときには、どういう形式にするかを指定してやらないといけない。

今回awkに実行させるのは以下のようなスクリプトファイルである。

=======================================
BEGIN { FS=”,” ; ORS=”\n” }
{    print “echo “$1″より”$2″>>”$4$5$6″.txt”
}
=======================================

2017年1月のカレンダーから取り出した予定ファイル(カンマ区切り形式)を「201701yotei.csv」(=awkに読み込ませるファイル)とし、このスクリプトファイルを「diary.awk(拡張子をawkとしているのは、awk用のスクリプトであることを明示的に示すためである)」とし、日記をつくり出すバッチファイル(=awkに吐き出させるファイル)を「201701diary.bat」としておこう*

*なお、これらのファイル名は自分で自由にきめればよいのであるが、後で見たときに何のためのファイルかわかりやすいように、また、コマンドライン上で打ち込みやすいように、半角数字とアルファベットだけのファイル名にしてある。

以上のファイルに対して、コマンドライン上で、

gawk -f diary.awk 201701yotei.csv > 201701diary.bat

という一行を実行するだけである。こうしてできあがった「201701diary.bat」を実行すれば(Windows上でダブルクリックするか、または、コマンドライン上でこのファイル名を入力してリターンキーを押す)、前回のように、もとの日記ファイルに予定が書き込まれるわけである。

なお、いうまでもないことだが、このバッチファイルが書き込む対象としている2017年1月の日記書き込み用ファイル=日付と曜日が先頭行にある20170101.txt~20170131.txtというファイルがすでに存在していることが、この作業の前提である。