Shell中的join方法(超详细)

Shell中的join方法(超详细)

 

将两个文件里指定栏位置同样的行连接起来,

即依照两个文件中共同拥有的某一列,将相应的行拼成一行(原文件不改变)

 

内连接(忽略不匹配的行) join file1 file2

显示左边文件中所有记录,右边文件中没有匹配的显示空白

Join -a1 file1 file2

显示右边文件中所有记录,左边文件中没有匹配的显示空白

Join -a2 file1 file2


全连接(又称全外连接,显示左边和右边所有记录)

Join -a1 -a2 file1 file2


指定输出字段

Join -o 1.1 file1 file2表示只输出第一个文件的第一个字段

指定输出多个字段

输出第一个文件的第一个字段,输出第二个文件的第二个字段

Join - o 1.1 2.2 1.2 file1 file2


指定分隔符

Join -t ‘:’ /etc/passwd /etc/shadow

不匹配输出

Join -v 1 -a1 -a2 file1 file2

-v FILENUM:与-a相似,但只显示文件里没有匹配的行

FILENUM : 区分左边还是右边的文件

 

[root@localhost join]# cat join1

www onmpw

domain jiyi

w3 blog

 

[root@localhost join]# cat join2

www com

domain cn

w3 net

Join org

wc l

 

[root@localhost join]# join join1 join2

www onmpw com

domain jiyi cn

w3 blog net

join: join2:6: is not sorted:

[root@localhost join]#

 

join -t : file.db file_hobby.db     #-t 指定分隔符,拼接列相等的行

 

[root@localhost join]# cat file.db

A li:20:men:anhui

B wang:21:women:jiangsu

C zhang:22:men:anhui

D liu:23:women:Shanghai

E chen:23:women:Hefei

[root@localhost join]# cat file_hobby.db

A li:Song

B wang:shopping

C zhang:pingpong

D liu:chess

E wang:reading

[root@localhost join]# join -t : file.db file_hobby.db

A li:20:men:anhui:Song

B wang:21:women:jiangsu:shopping

C zhang:22:men:anhui:pingpong

D liu:23:women:Shanghai:chess

 

 

join内拼接(都是基于join file1 file2的结果)

[root@localhost join]# vim file1

[root@localhost join]# seq 1 1 14 > file1

[root@localhost join]# vim file1

[root@localhost join]# seq 1 1 13 > file2

[root@localhost join]# ls

file1  file2  file.db  file_hobby.db  join1  join2

 

[root@localhost join]# cat file1

1 Jan

2 Feb

3 Mar

4 Apr

5 May

6 June

7 July

8 Aug

9 Sep

10 Oct

11 Nov

12 Dec

13 MonthUnknow

[root@localhost join]# cat file2

1 一月

2 二月

3 三月

4 四月

5 五月

6 六月

7 七月

8 八月

9 九月

10 十月

11 十一月

12 十二月

[root@localhost join]# join file1 file2

1 Jan 一月

2 Feb 二月

3 Mar 三月

4 Apr 四月

5 May 五月

6 June 六月

7 July 七月

8 Aug 八月

9 Sep 九月

10 Oct 十月

11 Nov 十一月

12 Dec 十二月

 

-a2显示右边文件中的所有记录,左边文件中没有匹配的显示空白

左:第一个 右:第二个

[root@localhost join]# join -a2 file2 file1

1 一月 Jan

2 二月 Feb

3 三月 Mar

4 四月 Apr

5 五月 May

6 六月 June

7 七月 July

8 八月 Aug

9 九月 Sep

10 十月 Oct

11 十一月 Nov

12 十二月 Dec

13 MonthUnknow

 

-a1显示左边文件中的所有记录,右边文件中没有匹配的显示空白

 

[root@localhost join]# join -a1 file2 file1

1 一月 Jan

2 二月 Feb

3 三月 Mar

4 四月 Apr

5 五月 May

6 六月 June

7 七月 July

8 八月 Aug

9 九月 Sep

10 十月 Oct

11 十一月 Nov

12 十二月 Dec

 

-a1 -a2 显示全外连接,显示左边和右边的所有结果

 

[root@localhost join]# join -a1 -a2 file2 file1

1 一月 Jan

2 二月 Feb

3 三月 Mar

4 四月 Apr

5 五月 May

6 六月 June

7 七月 July

8 八月 Aug

9 九月 Sep

10 十月 Oct

11 十一月 Nov

12 十二月 Dec

13 MonthUnknow

 

以下操作基于join file1 file2的结果

-o a.b 指定文件的字符join file1 file2处理结果后取第a个文件

(默认以空格为分隔符)的第一个字段

 

[root@localhost join]# join file1 file2

1 Jan 一月

2 Feb 二月

3 Mar 三月

4 Apr 四月

5 May 五月

6 June 六月

7 July 七月

8 Aug 八月

9 Sep 九月

10 Oct 十月

11 Nov 十一月

12 Dec 十二月

 

[root@localhost join]# join -o 1.1 file1 file2

1

2

3

4

5

6

7

8

9

10

11

12

[root@localhost join]# cat file1

1 Jan

2 Feb

3 Mar

4 Apr

5 May

6 June

7 July

8 Aug

9 Sep

10 Oct

11 Nov

12 Dec

13 MonthUnknow

 

输出join处理后的第一个文件的第一个字段 第二个文件的第二个字段

[root@localhost join]# join -o 1.1 2.2 file1 file2

1 一月

2 二月

3 三月

4 四月

5 五月

6 六月

7 七月

8 八月

9 九月

10 十月

11 十一月

12 十二月

输出join处理后的第一个文件的第一个字段

和第二个文件的第二个字段 和第一个文件的第二个字段

 

[root@localhost join]# join -o 1.1 2.2 1.2 file1 file2

1 一月 Jan

2 二月 Feb

3 三月 Mar

4 四月 Apr

5 五月 May

6 六月 June

7 七月 July

8 八月 Aug

9 九月 Sep

10 十月 Oct

11 十一月 Nov

12 十二月 Dec

 

[root@localhost join]# join -o 1.1 2.2 1.1 file1 file2

1 一月 1

2 二月 2

3 三月 3

4 四月 4

5 五月 5

6 六月 6

7 七月 7

8 八月 8

9 九月 9

10 十月 10

11 十一月 11

12 十二月 12

J

join -t ':' file1 file2   

-t 指定分隔符进行join操作,分隔符被单引号包围

[root@localhost join]# join -t ':' /etc/passwd /etc/shadow

root:x:0:0:root:/root:/bin/bash:$6$3ktjz.hGpwxfv9e4$2KlEAEf/Dj7Xstu2PnxbRul21hhpSOd2xXOBUYBSNfvg8Z2hXDL4ljKvvB/uhbyUdI0kc/ZJhRe4PrB8gMqo2/::0:99999:7:::

bin:x:1:1:bin:/bin:/sbin/nologin:*:16925:0:99999:7:::

daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:16925:0:99999:7:::

adm:x:3:4:adm:/var/adm:/sbin/nologin:*:16925:0:99999:7:::

 

 

join -v 1 -a1 -a2 file1 file2 输出不匹配的行输出

 

[root@localhost join]# join -v 1 -a1 -a2 file1 file2

13 MonthUnknow

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值