先日、長いことプログラミングをしているけどUNIXには不慣れな知人より「いっぱいテキストファイルがあって、それぞれからある行からある行まで抜き出したいんだけど良いUNIXコマンドある?」と聞かれた。たとえば「100個のテキストファイルのそれぞれ50行目から100行目を抜き出したい」というような感じなのだろう。
聞かれてすぐにheadとtailを使って for f in *.txt ; head -100 $f | tail -50 みたいにやることを思いつく。彼も head と tail については調べたようだけどそれをパイプでつなぐところまで考えが及ばなかったようだ。アドバイスしてあげたら「UNIXってすごい!」と感動されてしまった。ひとつひとつのコマンドは単純でもパイプで組み合わせて実際に役立つ仕事をしてくれるようになる素晴らしさを感じてもらえたのだと思う。
あっけにとられるほどシンプルだけどUNIXのフィルタとパイプの良さが伝わった例として微笑ましい出来事であった。