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

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

●具体的な指示とその実行

次の、「print」ではじまる行が命令の部分である。「print」は、単純な形式で出力するときに用いる命令であり、複雑な形式になる場合は、「printf」を利用する。後者については、次回以降に例をあげて説明する予定である。また、$1~$6は、csvファイルのデータの1番目のフィールドから6番目のフィールドを意味している。

繰り返しになるが、サンプルデータを再度示しておこう。

=======================================
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

というふうに出力してくれればよかったわけである。とすれば、もとのデータファイルから$1 $2 $4 $5 $6をこの順で取り出して並べ($3の終了時間のデータは使わない)、それらの間に「echo」「から」「>>」「.txt」などの文字列を挿入していけばいいわけである。問題は、$1~$6まで並べたデータの間に文字列をどうやって挿入するかということだけだが、これは意外に簡単である。挿入したい文字列を、それぞれのフィールドデータの前後に「””」でくくって指定してやればよいのである。

以上を命令として記述したのが、以下の一行である。

print “echo “$1″から”$2″>>”$4$5$6″.txt”

 ただし、実際にやるときは、「”」が文字列の始めと終わりにきちんと対応してついているかどうか、また、$1から$6までがそのなかに入り込んだりしていないか、などについて、きちんと点検しないといけない。だから、すぐにファイルに書き出さすことはせず、画面上にデータを表示させてみて、問題がなければ、ファイルにリダイレクトする、という方法を取る方がよいだろう。

また、ずっと同じフォルダーで作業しているとファイルがむやみに多くなってとても煩雑になる。だから、2017年1月の日記ファイルは、「201701」というフォルダを作ってそこに移動する、というふうにした方がよい。もちろん、そのことを、あらかじめスクリプトファイルに記述することもできる。

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

以上のようになる。「>>」のあとにフォルダ名を追加しただけのことだが、フォルダの区切り文字である「\」は、スクリプトファイルでは特別な意味をもつ記号なので、その意味を消すためにもうひとつ「\」を付加している。こういう小技は、awkの動作においてはなんら本質的な問題ではないが、実際の作業のときにはよく必要になってくるものであるから、覚えておくと楽である。

次回は、CSV形式になっている書誌データを用いて、それをgrepで検索し、検索した結果をawkで見やすく表示する方法を考えてみることにしよう。

 


 

顔写真・木越治アップロード用木越 治(きごし おさむ)

1948年生まれ
1971年 金沢大学文学部国文学科卒業
1975年 東京大学大学院博士後期課程退学。
博士(文学)

金沢大学名誉教授、元上智大学教授

 

 

〔主な著作〕
『秋成論』(ペリカン社、1995年)
『秋成文学の生成』(共編、森話社、2008年)
『上田秋成研究事典』(共著、笠間書院、2016年)
『新編浮世草子怪談集』〔江戸怪談文芸名作選〕(校訂代表、国書刊行会、2016年)

『米国議会図書館蔵 日本古典籍目録』(共編、八木書店、2003年)
『講談と評弾―伝統話芸の比較研究―』(八木書店、2010年)