(Video materials in preparation)
cjoin2x : Matches files with multiple records sharing the same key value
Usage : cjoin2x key=<n> <master> <tran>
Options : +<string>
-f<n>
-e
-s<c>
Version : Tue Jan 9 09:02:34 JST 2024
Edition : 1
Only those records in the text file <tran> where the <key> fields of
<tran> match corresponding fields of <master> are selected, then
joined with the fields in <master> and output. The join occurs by
adding the fields from <master> immediately after the <key> fields
in <tran>. For records that do not match, padding data "_" is joined
for the amount of fields in master. It is also possible to specify
different padding data by +<string> option.
<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 <master> is an empty file (0 bytes) an error is generated. If
-f<n> option is specified, this error is not generated and <n> is
used as number of non-key fields of <master>.
If "-" is specified for <master> then the command reads from
standard input. If "-" is specified for <tran> or if <tran> is
omitted then thecommand reads from standard input.
The difference with the cjoin2 command is you can have multiple
records can exist with the same key value as the key field in the
master file. The records in <master> and <tran> with the same value
in the key field are merged and then output.
$ cat master
1 TOKYO1
1 TOKYO2
2 OSAKA1
2 OSAKA2
$ cat tran
3 SAKAE
2 KYOBASHI
3 KANEYAMA
1 UENO
1 SHINJUKU
4 TENJIN
2 NAMBA
3 ATSUTA
2 UMEDA
4 HAKATA
$ cjoin2x key=1 master tran >data
$ cat data
3 _ SAKAE
2 OSAKA1 KYOBASHI
2 OSAKA2 KYOBASHI
3 _ KANEYAMA
1 TOKYO1 UENO
1 TOKYO2 UENO
1 TOKYO1 SHINJUKU
1 TOKYO2 SHINJUKU
4 _ TENJIN
2 OSAKA1 NAMBA
2 OSAKA2 NAMBA
3 _ ATSUTA
2 OSAKA1 UMEDA
2 OSAKA2 UMEDA
4 _ HAKATA