topurl = "http://headlines.yahoo.co.jp/hl"
のように定義しておいて、
使うところでそれに必要な文字列をつけたすようにすれば、
長い URL をたくさん書かなくて済みますし、
後で URL を変更する場合も楽です。
また、ニュース分野も容易に変えられるように
field = "soci"
のように定義しておくことにします。
作成するファイル名は、この分野名とページ番号を使って
soci-001.html, soci-002.html, ...のような名前にしますが、このような文字列は、
fname = sprintf("%s-%03d.html",field,j)
のようにして生成できます。sprintf() は
C 言語の printf() と同様の構文で書式化された文字列を生成でき、
%s
= の値が文字列としてそれに置き換わる
%d
= を数字とみてそれを文字列に直したものがそれに置き換わる
%03d
は、%d
に
さらに桁指定等がついているのですが、'3' は 3 桁で表示、
'0' は の値が 3 桁より少ない場合は上位の桁は 0 で埋めることを意味します。
よって、 の場合は ``001'', の場合は ``012'',
の場合は ``123'' のような文字列に置き換わることになります。
これにより、wget のコマンドラインは、
topurl = "http://headlines.yahoo.co.jp/hl" field = "soci" fname = sprintf("%s-%03d.html",field,1) url = sprintf("%s?c=%s&t=l",topurl,field) cmd = sprintf("wget -O %s \"%s\"",fname,url)とすれば が
wget -O soci-001.html "http://.../hl?c=soci&t=l"
(URL は長いので途中省略) という文字列になります。
なお、sprintf() 内の "" の中で " という文字自体を
使うときは \"
と書きます。
2 ページ目以降の場合は、これに ``&p=1
'' などをつけていけばいいわけです。
そしてこれらを
system(cmd)
として実行すれば wget が AWK の外で実行されます。
また、[5] にある加工を行う場合は、pages 個数の引数をつけて AWK を実行する必要がありますので、
awk = "awk" cmd = sprintf("%s -f yahoo2.awk",awk) for(j=1;j<=pages;j++) cmd = sprintf("%s %s-%03d.html",cmd,field,j) cmd = sprintf("%s > %s-lst1.html",cmd,field)のようにしてコマンドラインを追加しながら作成すればいいでしょう。
なお、awk="awk"
としているのは、
AWK コマンド名が ``gawk'' などである場合に
容易に修正できるように、と考えてのことです。