Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

AWKのFSは単体の文字で無くてもいい

Yahoo!ニュース・トピックス - サイエンス
から、RSSのファイルを取得してきます。

$ curl http://news.yahoo.co.jp/pickup/science/rss.xml > rss.xml
$ cat rss.xml | nl
     1	<?xml version='1.0' encoding='UTF-8'?>
     2	<rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" version="2.0">
     3	<channel>
     4	<title>Yahoo!ニュース・トピックス - サイエンス</title>
     5	<link>http://headlines.yahoo.co.jp/hl?c=c_sci</link>
     6	<description>Yahoo! JAPANのニュース・トピックスで取り上げている最新の見出しを提供しています。</description>
     7	<language>ja</language>
     8	<pubDate>Mon, 14 Sep 2015 23:44:57 +0900</pubDate>
     9	<item>
...
    15	<item>
    16	<title>太陽電池の集光 紙細工で進化</title>
    17	<link>http://news.yahoo.co.jp/pickup/6174339</link>
    18	<pubDate>Mon, 14 Sep 2015 15:19:55 +0900</pubDate>
    19	<enclosure length="133" url="http://i.yimg.jp/images/icon/photo.gif" type="image/gif">
    20	</enclosure>
    21	<guid isPermaLink="false">yahoo/news/topics/6174339</guid>
    22	</item>
...
    68	</item>
    69	</channel>
    70	</rss>

で、頭と尻尾を取りのぞき、rss2として保存し直します。

$ cat rss.xml | awk "(NR >= 9) && (NR <= 68)" > rss2.xml

これを、FSに”\n”と区切りを設定してあげて二番目の記事を表示します。

$ cat rss2.xml | awk 'BEGIN {FS="</item>\n"; RS=""} {print $2}'
<item>
<title>太陽電池の集光 紙細工で進化</title>
<link>http://news.yahoo.co.jp/pickup/6174339</link>
<pubDate>Mon, 14 Sep 2015 15:19:55 +0900</pubDate>
<enclosure length="133" url="http://i.yimg.jp/images/icon/photo.gif" type="image/gif">
</enclosure>
<guid isPermaLink="false">yahoo/news/topics/6174339</guid>

頑張って作りこめば、RubyPython、はてまた外部ライブラリはダメでAwkは大丈夫な環境*1でも、
データをRSSで作っちゃったアプリを使う事ができます。

*1:お察し下さい