cjoin2 <概要> cjoin2 : シーケンシャルキーマッチングジョイン <書式> Usage : cjoin2 [+<string>] [-f<n>] key=<n> <master> <tran> Version : Mon Feb 4 10:53:34 JST 2019 Edition : 1 <説明> テキストファイル <tran> の "key=<n>" で指定したキーフィールドがマス ターファイル <master> の第1フィールド(キーフィールド)とマッチした 行を <tran> から抽出して、<master> の情報を連結して出力します。マッ チしない行は、ダミーデータ "_" をフィールド数分だけ結合して出力しま す。ダミーデータは指定することもできます。 <master> の第1フィールドは必ず昇順でソートされていることが条件にな ります。更にキーフィールド(第1フィールド)について、各レコードがユ ニークでなければなりません。(第1フィールドが同じ値をもつレコードが 複数あってはなりません) join1 とは異なり、<tran> についてはこの制約はありません。キーフィー ルド(第 <n> フィールド)はソートされている必要はなく、同じ値を持つ レコードが有っても構いません。 <master> が空ファイル(0バイト)の場合はエラーになります。-f<n> が指 定されているとエラーにならず、<n> を <master> の非キーフィールドの個 数として扱います。 <key>としては、 key=3 <tran> の第3フィールド key=3/5 <tran> の第3,4,5フィールド(<master> は第1,2,3フィールド) key=4@3 <tran> の第4,3フィールド(<master> は第2,1フィールド) key=NF <tran> の最終フィールド(<master> は第1フィールド) key=NF-3 <tran> の(最終-3)フィールド(<master> は第1フィールド) が指定できます。 <master> に "-" を指定すると標準入力から読み込みます。<tran> が無指 定、あるいは "-" を指定すると標準入力から読み込みます。<master> と <tran> の両方が標準入力の場合はエラーになります。 cjoin2 は <master> 全体をメモリーに読み込みますので、<master> が巨大 だとメモリー確保エラーが起きるので注意が必要です。 <例1> 通常の使い方 $ cat master 0000003 杉山______ 26 F 0000005 崎村______ 50 F 0000007 梶川______ 42 F $ cat tran 0000005 82 79 16 21 80 0000001 46 39 8 5 21 0000004 58 71 20 10 6 0000009 60 89 33 18 6 0000003 30 50 71 36 30 0000007 50 2 33 15 62 $ cjoin2 key=1 master tran > ok-data $ cat ok-data 0000005 崎村______ 50 F 82 79 16 21 80 0000001 _ _ _ 46 39 8 5 21 0000004 _ _ _ 58 71 20 10 6 0000009 _ _ _ 60 89 33 18 6 0000003 杉山______ 26 F 30 50 71 36 30 0000007 梶川______ 42 F 50 2 33 15 62 <例2> +<string> オプションの使い方 $ cjoin2 +@ key=1 master tran > ok-data $ cat ok-data 0000005 崎村______ 50 F 82 79 16 21 80 0000001 @ @ @ 46 39 8 5 21 0000004 @ @ @ 58 71 20 10 6 0000009 @ @ @ 60 89 33 18 6 0000003 杉山______ 26 F 30 50 71 36 30 0000007 梶川______ 42 F 50 2 33 15 62 <例3> 標準入力から読む $ cat master | cjoin2 key=1 - tran $ cat tran | cjoin2 key=1 master - $ cat tran | cjoin2 key=1 master # "-" を省略できます。 <例4> <master> が空ファイルでも、-f<n> オプションが指定されている場合は <n> を <master> のキーフィールド以外のフィールド数として処理します。 $ cjoin2 -f3 key=1 /dev/null tran > ok-data $ cat ok-data 0000005 _ _ _ 82 79 16 21 80 0000001 _ _ _ 46 39 8 5 21 0000004 _ _ _ 58 71 20 10 6 0000009 _ _ _ 60 89 33 18 6 0000003 _ _ _ 30 50 71 36 30 0000007 _ _ _ 50 2 33 15 62 <備考> +<string> オプションは、旧 -d<string> オプションと同じです。 -d<string> オプションは廃止予定です。