📋

rfコマンドの実例: ソートする

に公開

実例: ソートする

ファイルの中身やコマンドの結果をソートして表示したいことがあります。RubyにはArray#sortがありますが、テキストフィルタの場合レコードはArrayにはならないので使えません。
そこで、--slurp(-s)オプションを使用します。このオプションはすべてのレコードを1つのArrayにまとめてレコードとするオプションです。
具体例を見てみます。

price-list.txt
128 Mango
420 Apple
315 Melon
307 Banana
512 Orange

sortしてみますが、前述のとおり意図した結果にはなりません。

> rf sort price-list.txt
Error: undefined method 'sort' for String

-sオプションを指定し、値段(1列目)でソートしてみます。

> rf -s sort price-list.txt
128 Mango
307 Banana
315 Melon
420 Apple
512 Orange

-sオプションとsortメソッドを組み合わせることで値段(1列目)でソートされました。

任意のカラムでソートする

今度は名前(2列目)でソートしてみます。Enumerator#sort_byを使うとすんなり記述できます。

> rf -s 'sort_by{|i| i.split[1] }' price-list.txt
420 Apple
307 Banana
128 Mango
315 Melon
512 Orange

名前(2列目)でソートされました。

GitHubで編集を提案

Discussion