The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

  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.
   -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始まりである。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.
   
 開発上のメモ : 
    * -/ の指定は正規表現と見なされるが、入力のsplitにも出力のjoin にも用いるので、注意が必要。
    * 引数で指定できる列に関して、範囲演算 .. に加えて  / で一定長の飛び飛びも定義できるようにしたい。

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

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

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