単語の出現回数をサクッと調べたい。
takuya 4 Lkue 1 yoshi 2
みたいな出力がほしい時がある。
Linuxでテキスト処理をやっていると、なんでこれくらいが出来ないんだ!そうおもって作ってるコマンド
次の名前一覧がある時
takuya@air:~/Desktop$ cat test takuya yoshi takuya takuya takuya yoshi Luke
名前の登場回数を数えたい
cat test |sort | ./count 1 1 Luke 4 takuya 2 yoshi
これくらいコマンドでできたら嬉しい。
mcount
mcount というコマンドを作ってみた。
#!/usr/bin/env ruby # coding:utf-8 require 'kconv' $KCODE='u' count = 1; word = gets().strip while tmp = gets() tmp.strip! count = count + 1 if word == tmp unless word == tmp then #puts "#{word}\t#{count}".toutf8 puts "#{count}\t#{word}".toutf8 word = tmp count = 1 end end puts "#{count}\t#{word}".toutf8
松田さんという◯イエーの情報処理のアドバイザしてた人が、20年も前に作ったコマンドの事を大学の恩師から訊いた。UNIXのパイプラインを徹底的に組み合わせて、複雑な情報処理をやろうという発想。初心者がSQLなんて覚えるの大変だし、、ベンダーロックインやら、技術の継承が大変。しかもJOIN地獄になる。なのでやっぱりUNIXはUNIXらしく、コマンドを組み合わせて使うのが最高。業務で使えば良いじゃん。
っていう発想。真っ当な発想だ。えらく感銘をうけて、できる限りコマンドを組み合わせてデータ処理するようになった。
この発想は面白いので、発想だけ頂いた。
コマンドまるごとパクるのはあれなので、rubyでサクッと作ってある。
ソート済みのデータ処理はほんとうに早いね
パフォーマンスが必要なら、Cで実装すればいいし。そもそも大量行を処理するならruby1.8のIOは遅いので、使いものにならないよ。
◯イエーがイオンやセブンイレブンよりいち早く売れ筋分析のPOSデータ分析が出来たのが、自社で使ってたUNIXコマンドのおかげだそうだ。
満足なCPUの無い時代に、小さいコマンドを組み合わせてた。小さいデータに分けて集計、分析、まとめては集計。なんだそれ!いまの分散処理じゃないか!
◯イエーの急成長には、このシンプルな分散処理が武器になって一役買ってたらしい。セブンイレブンのPOSガーとかもてやはしてるが、◯イエーのほうが一枚上手だった。
松田御大ともなんどかお話させていただいた。
大学の恩師と先輩と松田さん、いつもお世話になっております。