(Video materials in preparation)
cjoin0 : Sequential key matching select
Usage : cjoin0 key=<key> <master> <tran>
Options : +ng[<fd>]
-e
-s<c>
Version : Tue Jan 9 09:02:34 JST 2024
Edition : 1
Selects all records from <tran> where the <key> fields match
corresponding fields of <master>.
The <key> fields in <master> MUST be sorted. Also, the key fields
in <master> must only contain unique values (the same value cannot
be repeated in the <key> fields).
<key> designates the field position as fllows:
single field 2 the 2nd field
NF the last field
NF-1 the field just before the last field
contiguous fields 2/4 from the 2nd field to the 4th field
4/2 from the 4th field to the 2nd field
NF-3/NF from NF-3 field to the NF field
combination 2@NF the 2nd field and the NF field
There is no limit on the length of the key field or on the number
of key fields. The key field can also contain multi-byte characters
such as Japanese.
If you specify "r" as comparison method after the field position,
the fields are compared in reverse order. If you specify "n" as
comparison method after the field position, that field's values will
be compared as numbers. If you specify "nr" as comparison method
after the field, the values will be compared in reverse order as
numbers. If you specify comparison method before or after the "/",
you must use the same comparison method for both fields.
2n/5n OK
2n/5nr Error
2n/5r Error
When you specify "e" as comparison method or specify -e ootion and no
method, characters in the field are replaced as follows and compared
as string:
_ ==> 0x20 (space)
\0 ==> 0x00 (null)
\t ==> 0x09 (tab stop)
\n ==> 0x0a (new line)
\r ==> 0x0d (carrige return)
\_ ==> 0x5f (underscore)
\\ ==> 0x5c (back slash)
In all cases, the master must be sorted for the specified key. (The
transaction file need not be sorted).
If the file name is omitted or if it is specified as "-" then the
command will read from standard input.
cjoin0 reads the entire <master> file into memory, so if <master>
is extremely large a memory allocation error can occur. On the contrary,
when <master> is relatively small and <tran> is extremely large,
using cjoin0 is most efficient.
$ cat master
0000003 Wilson_____ 26 F
0000005 Hawking____ 50 F
0000007 Newton______ 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
$ cjoin0 key=1 master tran > ok
$ cat ok
0000005 82 79 16 21 80
0000003 30 50 71 36 30
0000007 50 2 33 15 62
$ cjoin0 +ng key=1 master tran > ok 2> ng
$ cat ng
0000001 46 39 8 5 21
0000004 58 71 20 10 6
0000009 60 89 33 18 6
$ cat tran | cjoin0 +ng key=1 master > ok 2> ng
$ cat tran | cjoin0 +ng key=1 master - > ok 2> ng
$ cat master | cjoin0 +ng key=1 - tran > ok 2> ng