プログラム :
$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 できちんと最後の列を表示すること。
* 列数が行毎に異なる入力データでも、きちんと動作すること。