From: Kusunoki Kaoru <kusunoki / mbox.kyoto-inet.or.jp>
Subject: [ruby-list:31499] はじめまして AWK から Ruby
Date: Mon, 17 Sep 2001 12:02:50 +0900

るびきちです。

> AWK の 一行読んで、自動で $0 ... から変数にはいるこの便利な機能は
> Ruby では split を使えばいいように思えますがこれより便利な方法は
> ありますか?

俺はAWKは一度も触ったことないですが、Ruby的にはこんな感じでは?
Rubyなら「イテレータ」という強力無比な武器がある。
以下のスクリプトをawk-split.rbとか適当な名前で保存して、
require 'awk-split' してみよう。

open( filename ) do |f|
  f.awk_split do |〜|
  ...
  end
end

とすればそのファイルを開いてから1行ずつ読んで自動splitされるし、

awk_split do |〜|
...
end

とすれば引数に指定したファイルor標準入力を1行ずつ読んで自動splitする。

# awk-split.rb
#!/usr/bin/env ruby
module AwkSplit
  def awk_split( arg = ' ' )
    while self.gets
      f = split( arg )
      yield f
    end
  end
end

class IO
  include AwkSplit
end
ARGF.extend AwkSplit

def awk_split( arg = ' ' )
  ARGF.awk_split( arg ) {|args| yield args}
end

if __FILE__ == $0  # awk-split.rbそのものを実行したときのみ↓のコードが実行されるイディオム。
  open( "/etc/passwd" ) do |inf|
    inf.awk_split( /:/ ) do |user, pass, uid, gid, group, home, shell|
      puts user
    end
  end
end

結果
root
daemon
bin
sys
sync
games
.
.
.


るびきち☆
http://voo.to/ruby/ ←Ruby大衆化計画(笑)