📋

rfコマンドのグローバル変数と定数

に公開

グローバル変数と定数

rfコマンドで定義されているグローバル変数と定数について解説します。

record, $_ , _

record, $_には現在のレコードが格納されています。_ (アンダーバー)はエイリアスになっています。

> echo 'foo bar baz' | rf record
foo bar baz

> echo 'foo bar baz' | rf '$_'
foo bar baz

> echo 'foo bar baz' | rf _
foo bar baz

fields, $F

fields, $Fは各フィールドが格納されたArrayです。添字は0始まりです。

> echo 'foo bar baz' | rf fields
foo
bar
baz

> echo 'foo bar baz' | rf '$F'
foo
bar
baz

> echo 'foo bar baz' | rf '$F[0]'
foo

> echo 'foo bar baz' | rf '$F[1]'
bar

_1, _2, _3, ...

_1, _2, _3, ... は各フィールドに対応した変数です。例えば、_1$F[0]と同義です。

> echo 'foo bar baz' | rf _1
foo

> echo 'foo bar baz' | rf _2
bar

NR, $.

NR$.は現在読み込んだレコードの数を表します。

example-file
foo
bar
baz
> rf '"#{NR} #{_}"' example-file
1 foo
2 bar
3 baz

> rf '"#{$.} #{_}" example-file
1 foo
2 bar
3 baz

組み込みメソッド

ここではrfコマンドが定義している組み込みメソッドについて解説します。

string?, hash?, array?

string? -> bool
hash? -> bool
array? -> bool

それぞれ、レコードがStringなのかHashなのかArrayなのかを判定します。レコードの型はフィルタやオプションによって違うのでそれを判定する目的です。

> echo foo | rf -q 'p string?'
true

> echo '{"foo": "bar"}' | rf json -q 'p hash?'
true

# -sオプションですべてのレコードを1つのArrayに格納したレコードにしています
> echo '{"foo": "bar"}' | rf json -s -q 'p array?'
true

match, match?

match(pattern) -> MatchData | nil
match(pattern) {|fields| ... } -> object
match?(pattern) -> boolean
m(pattern) -> MatchData | nil
m(pattern) {|fields| ... } -> object
m?(pattern) -> boolean

レコードが指定されたパターンにマッチしているかを判定し、マッチした結果を返却します。patternがStringの場合、それを正規表現として扱います。patternがRegexpの場合、そのインスタンスのmatchメソッドを呼び出します。trueが指定された場合はすべてにマッチし、逆にfalseの場合必ずnilが返却されます。ブロックが指定され、また、patternにマッチした場合にそのブロックが実行されます。ブロックには、各フィールドが引数として渡されます。ブロックの評価結果が返却されます。
match?は、patternにマッチしたらtrueを返却し、それ以外はfalseを返却します。
matchとmatch?はそれぞれmとm?という短い名前のエイリアスがあります。

> echo abc | rf -q 'p match("abc")'
#<OnigMatchData:0x330096e0>

❯ echo abc | rf -q 'p match(/abc/)'
#<OnigMatchData:0x3d7e5f0>

❯ echo abc | rf -q 'p match(/abc/){ "foobar" }'
"foobar"

❯ echo abc | rf -q 'p match?(/abc/)'
true

❯ echo abc | rf -q 'p m(/abc/)'
#<OnigMatchData:0x30dc75f0>

at_exit

at_exit { ... } -> nil

コマンド実行後に指定されたブロックを実行します。

> echo foo | rf '_; at_exit{ p "bar" }'
"bar"
GitHubで編集を提案

Discussion