linux里join命令的用法

2018-07-17 21:48:43 3996

 join命令一般不常用,不过每个命令肯定都有它的意义,了解了一下发现也挺有意思,也许哪天就真能用到。

join适合将一些结构化的文本数据进行整合。前提他们都是多列数据,其中多个文件中有一个意义相同且数据不重复的列,比如一个文件存放着学生的学号和姓名,另一个文件存放着学号和高考分数,这时将这两个文本文件合在一起就可以使用join方法。示例如下:

[root@123 ~]# cat a.txt     #列出a.txt文件内容

1   春天

2   夏天

3   秋天

4   冬天

5   冬去春来

[root@123 ~]# cat b.txt     #列出b.txt文件内容

0   春来天

1   暖 

2   热

3   凉

4   冷 

[root@123 ~]# join a.txt b.txt  #使用join相连,就像mysql的连接一样,默认是内连接,

1 春天 暖 

2 夏天 热

3 秋天 凉

4 冬天 冷 

[root@123 ~]# join -o 1.1 1.2 1.3 a.txt b.txt    #可以指定输出哪些列并指定排序,1/2文件代表文件1/2的第几列。      

1 春天 

2 夏天 

3 秋天 

4 冬天 

[root@123 ~]# join -o 1.1 1.2 2.2 a.txt b.txt   

1 春天 暖

2 夏天 热

3 秋天 凉

4 冬天 冷

[root@123 ~]# join -o 1.1 2.2 1.2 a.txt b.txt   

1 暖 春天

2 热 夏天

3 凉 秋天

4 冷 冬天

[root@123 ~]# join -a1 a.txt b.txt  #就像mysql的左连接,右连接一样。

1 春天 暖 

2 夏天 热

3 秋天 凉

4 冬天 冷 

5 冬去春来

[root@123 ~]# join -a2 a.txt b.txt 

0 春来天

1 春天 暖 

2 夏天 热

3 秋天 凉

4 冬天 冷 

[root@123 ~]# join -a1 -a2 a.txt b.txt 

0 春来天

1 春天 暖 

2 夏天 热

3 秋天 凉

4 冬天 冷 

5 冬去春来

[root@123 ~]# cat a.txt b.txt   #把文件内容换了一下。原来是制表分开,改成=号

1=春天

2=夏天

3=秋天

4=冬天


1=暖

2=热

3=凉

4=冷

[root@123 ~]# join  a.txt b.txt         #直接连接时报错,找不到有序数据

join: file 1 is not in sorted order

[root@123 ~]# join -t '=' a.txt b.txt   #指定以=分开才可以结合在一起。

1=春天=暖

2=夏天=热

3=秋天=凉

4=冬天=冷

[root@123 ~]# cat a.txt     #修改文件内容,使得b.txt中的ID数字不在第一列

1=春天

2=夏天

3=秋天

4=冬天

[root@123 ~]# cat b.txt 

暖=1

热=2

凉=3

冷=4

[root@123 ~]# join -1 1 -2 2 -t '=' a.txt b.txt     #连接时指定每个文件使用哪列判断相等

1=春天=暖

2=夏天=热

3=秋天=凉

4=冬天=冷

[root@123 ~]# join -1 2 -2 1 -t '=' b.txt a.txt    

1=暖=春天

2=热=夏天

3=凉=秋天

4=冷=冬天

[root@123 ~]# join -1 2 -2 1  -o 1.2 2.2 1.1 -t '=' b.txt a.txt  #指定连接哪些列和顺序

1=春天=暖

2=夏天=热

3=秋天=凉

4=冬天=冷

[root@123 ~]# 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: