次へ: 8 MS-Windows ユーザの場合 上へ: AWK によるシェル作業 前へ: 6.2 コマンドラインの作成 (PDF ファイル: awkwww4.pdf)


7 全体のソースコード

以上を踏まえて全体のソースコードを紹介すると以下のようになります。
  BEGIN{
      topurl = "http://headlines.yahoo.co.jp/hl"
      if(field == "") field = "soci"
      awk="awk"

      ### (1) 先頭のページを取得
      fname = sprintf("%s-%03d.html",field,1)
      url = sprintf("%s?c=%s&t=l",topurl,field)
      cmd = sprintf("wget -O %s \"%s\"",fname,url)
      system(cmd)

      ### (2) pages を取得
      pages = getpages(fname)

      for(j=1;j<pages;j++){
          ### (3) 2 ページ目以降を取得
          fname = sprintf("%s-%03d.html",field,j+1)
          url = sprintf("%s?c=%s&t=l&p=%d",topurl,field,j)
          cmd = sprintf("wget -O %s \"%s\"",fname,url)
          system(cmd)
      }

      ### (4) [field]-lst1.html を作成
      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)
      system(cmd)

      ### (5) [field]-lst2.html を作成
      cmd = sprintf("%s -f yahoo3-%s.awk -f yahoo3.awk",awk,field)
      cmd = sprintf("%s %s-lst1.html > %s-lst2.html",cmd,field,field)
      system(cmd)
  }

  ##### pages の取得 #####
  function getpages(fname,        pages)
  {
      pages = 0
      while (getline < fname){
          if($0 ~ /^[1-9][0-9]*\/[1-9]/){
              match($0,/\/[1-9][0-9]*/)
              pages = substr($0,RSTART+1,RLENGTH-1)+0
              break
          } 
      }
      close(fname)
      return pages
  }

ページの取得は getpages() という関数にしてあります。 全体の流れはそう難しくはないと思います。


次へ: 8 MS-Windows ユーザの場合 上へ: AWK によるシェル作業 前へ: 6.2 コマンドラインの作成
竹野茂治@新潟工科大学
2006年9月29日