Skip to content

Read two NDJSON files and combine lines with common member values.

License

Notifications You must be signed in to change notification settings

winebarrel/jljoin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jljoin

Read two NDJSON files and combine lines with common member values.

NOTE: FILE1 and FILE2 must be sorted by the value of the join member. (cf. jlsort)

Build Status

Installation

brew install winebarrel/jl/jljoin

Usage

Usage: jljoin [OPTIONS] FILE1 FILE2

Options:
    -k, --key KEY       JSON key to join
    -1, --key1 KEY1     JSON key to join of FILE1
    -2, --key2 KEY2     JSON key to join of FILE2
    -m, --merge PRIORITY_FILENUM (1 or 2)
                        Merge the paired JSON
        --allow-no-key  Allow no key
    -v, --version       Print version and exit
    -h, --help          Print usage and exit
% cat a.ndjson
{"id": 1, "sub_id": 11, "file":"ndjson1", "val":"both"}
{"id": 2, "sub_id": 21, "file":"ndjson1", "val":"both/multi 1"}
{"id": 2, "sub_id": 22, "file":"ndjson1", "val":"both/multi 1"}
{"id": 3, "sub_id": 31, "file":"ndjson1", "val":"both/multi 2"}
{"id": 4, "sub_id": 41, "file":"ndjson1", "val":"only 1"}
{"id": 6, "sub_id": 62, "file":"ndjson1", "val":"both/multi"}
{"id": 6, "sub_id": 61, "file":"ndjson1", "val":"both/multi"}

% cat b.ndjson
{"id": 1, "sub_id": 11, "file":"ndjson2", "val":"both"}
{"id": 2, "sub_id": 21, "file":"ndjson2", "val":"both/multi 1"}
{"id": 3, "sub_id": 31, "file":"ndjson2", "val":"both/multi 2"}
{"id": 3, "sub_id": 32, "file":"ndjson2", "val":"both/multi 2"}
{"id": 5, "sub_id": 51, "file":"ndjson2", "val":"only 2"}
{"id": 6, "sub_id": 62, "file":"ndjson2", "val":"both/multi"}
{"id": 6, "sub_id": 61, "file":"ndjson2", "val":"both/multi"}

% jljoin -k id a.ndjson b.ndjson
[{"file":"ndjson1","id":1,"sub_id":11,"val":"both"},{"file":"ndjson2","id":1,"sub_id":11,"val":"both"}]
[{"file":"ndjson1","id":2,"sub_id":21,"val":"both/multi 1"},{"file":"ndjson2","id":2,"sub_id":21,"val":"both/multi 1"}]
[{"file":"ndjson1","id":2,"sub_id":22,"val":"both/multi 1"},{"file":"ndjson2","id":2,"sub_id":21,"val":"both/multi 1"}]
[{"file":"ndjson1","id":3,"sub_id":31,"val":"both/multi 2"},{"file":"ndjson2","id":3,"sub_id":31,"val":"both/multi 2"}]
[{"file":"ndjson1","id":3,"sub_id":31,"val":"both/multi 2"},{"file":"ndjson2","id":3,"sub_id":32,"val":"both/multi 2"}]
[{"file":"ndjson1","id":6,"sub_id":62,"val":"both/multi"},{"file":"ndjson2","id":6,"sub_id":62,"val":"both/multi"}]
[{"file":"ndjson1","id":6,"sub_id":62,"val":"both/multi"},{"file":"ndjson2","id":6,"sub_id":61,"val":"both/multi"}]
[{"file":"ndjson1","id":6,"sub_id":61,"val":"both/multi"},{"file":"ndjson2","id":6,"sub_id":62,"val":"both/multi"}]
[{"file":"ndjson1","id":6,"sub_id":61,"val":"both/multi"},{"file":"ndjson2","id":6,"sub_id":61,"val":"both/multi"}]

% jljoin -k id -m 1 a.ndjson b.ndjson
{"file":"ndjson1","id":1,"sub_id":11,"val":"both"}
{"file":"ndjson1","id":2,"sub_id":21,"val":"both/multi 1"}
{"file":"ndjson1","id":2,"sub_id":22,"val":"both/multi 1"}
{"file":"ndjson1","id":3,"sub_id":31,"val":"both/multi 2"}
{"file":"ndjson1","id":3,"sub_id":31,"val":"both/multi 2"}
{"file":"ndjson1","id":6,"sub_id":62,"val":"both/multi"}
{"file":"ndjson1","id":6,"sub_id":62,"val":"both/multi"}
{"file":"ndjson1","id":6,"sub_id":61,"val":"both/multi"}
{"file":"ndjson1","id":6,"sub_id":61,"val":"both/multi"}

Related Links