$0 ファイル名の並び
入力: 改行区切りで値の書き込まれた1個またはそれ以上のファイル
出力:
ファイルが n 個入力として与えられた場合、それらn個のファイルに
出現した各行の値について、それがどのファイルに出現したかに応じて、最大
2 ** n -1 通りに分類し、各分類(出力の各行(縦方向)に相当)において
異なる値が何通り出現したか(横方向の第1列目)、それらの値がi番目の
ファイルに何回出現したか(横方向の第i+1列目)の数を出力する。
オプション:
-= : 入力の各ファイルにおいて、1行目を読み飛ばす。
-1 : 1番目のファイルの各行を、残り(n-1)個と単にそれぞれ比較。
-e perl_cmd_string ; 各行をchompした後の$_について、どう加工するか指定。-e 'substr $_,0,4' など。
-q 0 : 値をクオーテーションで囲まない。
-q STR; 0以外の値が指定されたら、その文字で囲む。"'" や'"'または必要に応じエスケープして指定せよ。
-v 0 : 出力の各行において、右側の2列に、各分類の文字列としての最小値と最大値は出力しない。
-R 0 ; 行末の\rを除去しない(Windows形式の改行に通常時は対処するが、-R0によりそれを解除。)
利用例(実験例) :
cat somefile | venn
# somefile の行数と、異なる行の値の個数が分かる。
venn <(seq 1 3) <(seq 3 5) <(seq 5 18)
# <( .. ) はプロセス置換なので、Unix-like のシェルでないと動かない可能性はある。
venn -v0 <(saikoro) <(saikoro) <(saikoro)
# saikoro はこの$0を作った著者がこの$0と共に提供される別のプログラム。
開発メモ:
* 入力したファイル名を出力するようにしたい。(現状file1, file2..のような表示のみ)
* 共通して計数対象としない値を -#で指定可能としたい。
* 文字列の min と max 以外 *も* 出力できるようにしたい。
* -1 指定時の実装は十分ではない。