電網郊外散歩道

本と音楽を片手に、電網郊外を散歩する風情で身辺の出来事を記録。退職後は果樹園農業と野菜作りにも取り組んでいます。

バックアップデータから日付と記事タイトル一覧を抽出する

2010年07月08日 06時02分24秒 | コンピュータ
当ブログでは、goo-ブログアドバンスに契約してから、記事のバックアップを取れるようになりました。これは、記事とコメント等のテキストデータで、次のような一定の書式からなっています。

--------
AUTHOR: narkejp
TITLE: ~記事のタイトル~
DATE: MM/DD/YYYY HH:MM:SS
PRIMARY CATEGORY: 記事のカテゴリー
STATUS: publish
ALLOW COMMENTS: コメント数
ALLOW PINGS: トラックバック数
CONVERT BREAKS:
-----
BODY:
本文~
-----
-------- (←レコードの区切り)

ここから、

MM/DD/YYYY 記事のタイトル~

という形式の記事一覧を抽出したい、というわけです。要するに、複行レコード形式のテキストデータから、目的のフィールドだけを抽出してレポートするには、という作業です。こういう作業には、awk 等が適しているでしょう。試してみました。

(1) 得られたバックアップを、narkejp-blog.txt というテキストファイル形式で保存し、テキストエディタで読み込んで元データを目視チェックしました。
(2) 都合上、ファイルの先頭に、半角スペース8個(--------)からなる行を追加挿入しておきます。これで、全部のレコードが同じデータ構造になります。
(3) インデントが崩れてしまいますが、日付とタイトル抽出のスクリプトは、

# gooblog.awk バックアップから日付とタイトルを抽出
# -- for awk/gawk/jgawk, 2010/07/07, narkejp
BEGIN {
RS="--------" # レコード区切子
FS="@n" # フィールド区切子
}
$2~/narkejp/ { # author名がnarkejpのもの
$4=substr($4,7,10) # 日付データの取得(*1)
$3=substr($3,8) # 記事タイトルの取得(*2)
print $4,$3 # 「日付 記事タイトル~」形式で出力
}

ただし、@をバックスラッシュに変える。

(3) これで、レコード中に narkejp という文字列を含むデータから、日付とタイトルの一覧を得るには、

(g)awk -f gooblog.awk narkejp-blog.txt > gootitle.txt

のようにします。
(4) 同様の考え方で gooblog.awk を改変し、カテゴリー区分を追加したり、コメント数やTB数を添えたりする形に整理することもできます。また、行頭にレコード数を付加する(*3)のも良いかもしれません。

(*1): substr($4,7,10) は、第4フィールド($4:DATE)の7桁目から、MM/DD/YYYY という全10桁を帰す文字列関数。
(*2): substr($3,8) は、第3フィールド($3:TITLE)の第8桁目以降の文字列を帰す関数。
(*3):行頭にレコード数を追加するには、組み込み関数 NR を用いて、gooblog.awk の該当行を

print NR,$4,$3 # 「番号 日付 記事タイトル~」形式で出力

のようにすれば、OK でしょう。

【追記】
日付の形式が MM/DD/YYYY という形式でした。また、goo ブログでは、バックスラッシュが消えてしまう仕様になっているようで、@ で代用し、注記することにしました。
コメント