プログラム :

$0 

AWK言語やコマンドcutよりも列の抽出を簡単に書けるコマンドラインを提供する。

概要:

 TSVファイル等の指定された列を表示する。
  -p で表示する列を指定する。
  -d で表示しない列を指定する。
  -h で先頭(各行の左部分に表示する列を指定する。
  -t で末尾(各行の右部分に表示する列を指定する。

利用例 :  
 $0 -p 5..9,2 -d 6..8 ; # 5列目から9列目の後に2列目を表示するが、ただし6,7,8列目は省く。 
 $0 -p -1  ; # 最後から1列目のみを表示

他のオプション : 
  -= : データの1行目に記載された列名で指定する。-= を用いない場合は列指定は,左からの1から始まる番号になる。
  -e : 存在しないセルを指定したときに表示する文字列
  -r : 存在しないセルを指定したときは、その時の入力行が横に無限に周期的につながっていると仮定して、指定位置を取り出す。

  -/ STRING ; 入出力の区切り子の指定。空文字列を指定する(-/ '' のように空白が間に必要)と、文字単位の処理になる。未指定ならタブ文字。
        
  -n  : 列に番号を付与する。
  -~  : 列の順番を逆転して、元に戻したい時に使う。 $0 -t3 | $0 -~ -t3 のように使う。5列に対して $0 -~ -p3,4,2,1,5 のような使い方をする。

 --help : この $0 のヘルプメッセージを出す。  perldoc -t $0 | cat でもほぼ同じ。
 --help opt : オプションのみのヘルプを出す。opt以外でも options と先頭が1文字以上一致すれば良い。

補足 : 
  - 列番号は左の列から数える。1始まりである。
  - 列番号を負の数で指定すると、末尾から数える。
  - 範囲を指定することもできる。たとえば、-p 2..5 とすると2列目から5列目のみ表示する。 5..2 とすると、逆順になる。
  
開発上のメモ : 
   * -/ の指定は正規表現と見なされるが、入力のsplitにも出力のjoin にも用いるので、注意が必要。

このプログラムに求められる要件 (テストにも含めたい) :

* 十分高速に動作すること。gawk と同じ程度が目標だった。cut よりは高速にしたかった。。
* cutより早くするのが厳しければ、 同じファイルを Unix コマンドsort の半分程度であること。
* $0 -p -1 できちんと最後の列を表示すること。
* 列数が行毎に異なる入力データでも、きちんと動作すること。