Skip to content

joyn joins lines of two files with a common characters, field or regular expression.

License

Notifications You must be signed in to change notification settings

jiro4989/joyn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

joyn

nimble-version nimble-install gh-actions

joyn joins lines of two files with a common characters, field or regular expression. joyn is heavily inspired by coreutils/join.

$ cat tests/testdata/user.csv
id,name,hobby_id
1,taro,1
2,taro,4
3,ichiro,3
4,ichiro,1
5,hanako,2
6,hanako,3
7,hanako,4
8,john,1
9,john,5
10,bob,2

$ cat tests/testdata/hobby.txt
id hobby
1 soccer
2 baseball
3 running
4 cokking
5 sleep

$ joyn -- / c -d , -f 3 / c -d " " -f 1 / tests/testdata/user.csv tests/testdata/hobby.txt
1,taro,1 1 soccer
2,taro,4 4 cokking
3,ichiro,3 3 running
4,ichiro,1 1 soccer
5,hanako,2 2 baseball
6,hanako,3 3 running
7,hanako,4 4 cokking
8,john,1 1 soccer
9,john,5 5 sleep
10,bob,2 2 baseball

-o controls output fields.

$ joyn -o '1.1,1.2,2.2' -- / c -d , -f 3 / c -d " " -f 1 / tests/testdata/user.csv tests/testdata/hobby.txt
1 taro soccer
2 taro cokking
3 ichiro running
4 ichiro soccer
5 hanako baseball
6 hanako running
7 hanako cokking
8 john soccer
9 john sleep
10 bob baseball
$ cat tests/testdata/app.log
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/login 200 Firefox 20s
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile 200 Firefox 20s
2020-01-02 02:33:20 [INFO] POST /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile/edit 200 Firefox 20s
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile 200 Firefox 20s
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/logout 200 Firefox 20s
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/login 200 Firefox 20s
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile 200 Firefox 20s
2020-01-02 07:06:20 [INFO] POST /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile/edit 200 Firefox 20s
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile 200 Firefox 20s
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/logout 200 Firefox 20s
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/login 200 Firefox 20s
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile 200 Firefox 20s
2020-01-02 05:49:46 [INFO] POST /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile/edit 200 Firefox 20s
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile 200 Firefox 20s
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/logout 200 Firefox 20s

$ cat tests/testdata/user2.csv
id,name
6ddbfb64-0b7b-488f-8300-e34cd243d4aa,taro
a31743ac-41ab-42bb-bee2-8825ddbe9f35,ichiro
68137b2e-d771-492f-980d-5862f27b8821,hanako
0fe2db6f-58b6-4835-9e24-200a2ac8f0a9,john
36858cb5-2ae5-4b7b-b94e-51170a3844f9,bob

$ joyn -- / g '\s/([^/]+)/[^s]+\s' / c -d ',' -f 1 / tests/testdata/app.log tests/testdata/user2.csv
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/login 200 Firefox 20s 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9,john
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile 200 Firefox 20s 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9,john
2020-01-02 02:33:20 [INFO] POST /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile/edit 200 Firefox 20s 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9,john
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile 200 Firefox 20s 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9,john
2020-01-02 02:33:20 [INFO] GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/logout 200 Firefox 20s 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9,john
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/login 200 Firefox 20s a31743ac-41ab-42bb-bee2-8825ddbe9f35,ichiro
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile 200 Firefox 20s a31743ac-41ab-42bb-bee2-8825ddbe9f35,ichiro
2020-01-02 07:06:20 [INFO] POST /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile/edit 200 Firefox 20s a31743ac-41ab-42bb-bee2-8825ddbe9f35,ichiro
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile 200 Firefox 20s a31743ac-41ab-42bb-bee2-8825ddbe9f35,ichiro
2020-01-02 07:06:20 [INFO] GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/logout 200 Firefox 20s a31743ac-41ab-42bb-bee2-8825ddbe9f35,ichiro
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/login 200 Firefox 20s 6ddbfb64-0b7b-488f-8300-e34cd243d4aa,taro
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile 200 Firefox 20s 6ddbfb64-0b7b-488f-8300-e34cd243d4aa,taro
2020-01-02 05:49:46 [INFO] POST /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile/edit 200 Firefox 20s 6ddbfb64-0b7b-488f-8300-e34cd243d4aa,taro
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile 200 Firefox 20s 6ddbfb64-0b7b-488f-8300-e34cd243d4aa,taro
2020-01-02 05:49:46 [INFO] GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/logout 200 Firefox 20s 6ddbfb64-0b7b-488f-8300-e34cd243d4aa,taro

-o controls output fields by named capturing group.

$ joyn -o '1.1,1.2,1.4,1.5,2.2,1.id' -- \
  / g '\s/([^/]+)/[^s]+\s' -d ' ' -g '\s/(?P<id>[^/]+)/[^s]+\s' \
  / c -d ',' -f 1 \
  / tests/testdata/app.log tests/testdata/user2.csv
2020-01-02 02:33:20 GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/login john 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9
2020-01-02 02:33:20 GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile john 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9
2020-01-02 02:33:20 POST /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile/edit john 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9
2020-01-02 02:33:20 GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/profile john 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9
2020-01-02 02:33:20 GET /0fe2db6f-58b6-4835-9e24-200a2ac8f0a9/logout john 0fe2db6f-58b6-4835-9e24-200a2ac8f0a9
2020-01-02 07:06:20 GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/login ichiro a31743ac-41ab-42bb-bee2-8825ddbe9f35
2020-01-02 07:06:20 GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile ichiro a31743ac-41ab-42bb-bee2-8825ddbe9f35
2020-01-02 07:06:20 POST /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile/edit ichiro a31743ac-41ab-42bb-bee2-8825ddbe9f35
2020-01-02 07:06:20 GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/profile ichiro a31743ac-41ab-42bb-bee2-8825ddbe9f35
2020-01-02 07:06:20 GET /a31743ac-41ab-42bb-bee2-8825ddbe9f35/logout ichiro a31743ac-41ab-42bb-bee2-8825ddbe9f35
2020-01-02 05:49:46 GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/login taro 6ddbfb64-0b7b-488f-8300-e34cd243d4aa
2020-01-02 05:49:46 GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile taro 6ddbfb64-0b7b-488f-8300-e34cd243d4aa
2020-01-02 05:49:46 POST /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile/edit taro 6ddbfb64-0b7b-488f-8300-e34cd243d4aa
2020-01-02 05:49:46 GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/profile taro 6ddbfb64-0b7b-488f-8300-e34cd243d4aa
2020-01-02 05:49:46 GET /6ddbfb64-0b7b-488f-8300-e34cd243d4aa/logout taro 6ddbfb64-0b7b-488f-8300-e34cd243d4aa
nimble install https://github.com/jiro4989/joyn

MIT

About

joyn joins lines of two files with a common characters, field or regular expression.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages