csel -- Easier interface than cut/AWK to handle TSV/CSV input,
 with the options such as -p(Printing)/-d(Deleting)/-h(moving to Head)/-t(moving to Tail).


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

概要:

 TSVファイル等の指定された列を表示する。Specifying the column(s) by
  -p で表示する列を指定する。 for printing by -p
  -d で表示しない列を指定する。for hiding by -d 
  -h で先頭(各行の左部分に表示する列を指定する。 for moving the leftmost by -h 
  -t で末尾(各行の右部分に表示する列を指定する。 for moving the rightmost by -t

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

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

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

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

補足 : 
  - 列番号は左の列から数える。1始まりである。The leftmost column is numbered "1(one)". Not "0(zero)"
  - 列番号を負の数で指定すると、末尾から数える。 The rightmost column is numbered "-1".
  - 範囲を指定することもできる。たとえば、-p 2..5 とすると2列目から5列目のみ表示する。 5..2 とすると、逆順になる。 ".." means range.
  
開発上のメモ : 
   * -i の指定は正規表現と見なされるが、入力のsplitにも出力のjoin にも用いるので、注意が必要。
   * 引数で指定できる列に関して、範囲演算 .. に加えて  / で一定長の飛び飛びも定義できるようにしたい。
   * AWKのコマンドを生成するようにせよ。

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

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

# このブログラムは 2016年2月9日(火)から表形式データに対する道具作りの一環として、下野寿之が作成したものである。