Linux join 您所在的位置:网站首页 两个文件内容合并 Linux join

Linux join

2023-08-11 08:12| 来源: 网络整理| 查看: 265

用途说明

Linux下最常用的数据文件格式是文本格式的,多个字段之间通过分隔符来区分,分隔符比如冒号(:)、制表符、空格等。/etc/passwd和/etc/group就是用:来分隔的,用MySQL的into outfile指令导出的数据通常是以制表符分隔的。这种文本格式既方便人去阅读,也适合程序处理,通常某列类似于数据库中的关键字。join命令就是一 个根据关键字合并数据文件的命令(join lines of two files on a common field),类似于数据库中两张表关联查询。

常用参数

join命令根据公共字段(关键字)来合并两个文件的数据行。因此最简单的使用方式就是指定两个数据文件名,这两个文件的第一列就是公共字段,字段之间以空白分隔。(For  each  pair  of  input lines with identicaljoin fields, write a line to standard output.  The default join field isthe first, delimited by whitespace.  When FILE1 or FILE2 (not both) is -,read standard input.)

内连接(innerjoin)                                    格式:join

左连接(leftjoin, 左外连接, left outer join)     格式:join -a1

右连接(rightjoin, 右外连接,right outer join)  格式:join -a2

全连接(fulljoin, 全外连接, full outer join)      格式:join -a1-a2

 

指定分隔符:

-t

比如:-t ':'使用冒号作为分隔符。默认的分隔符是空白。

 

指定输出字段:

-o ...

其中FILENO=1表示第一个文件,FILENO=2表示第二个文件,FIELDNO表示字段序号,从1开始编号。默认会全部输出,但关键字列只输出一次。

比如:-o 1.1 1.2 2.2表示输出第一个文件的第一个字段、第二个字段,第二个文件的第二个字段。

 

使用示例

示例一 内连接(忽略不匹配的行)

不指定任何参数的情况下使用join命令,就相当于数据库中的内连接,关键字不匹配的行不会输出。

[root@rhel55 linux]#cat month_cn.txt

1      一月

2      二月

3      三月

4      四月

5      五月

6      六月

7      七月

8      八月

9      九月

10     十月

11     十一月

12     十二月

13      十三月,故意的

[root@rhel55 linux]#cat month_en.txt

1      January

2      February

3      March

4      April

5      May

6      June

7      July

8      August

9      September

10     October

11             November

12     December

14      MonthUnknown

注:注意两个文件的内容,中文版的多了十三月,英文版的多了14月,这纯粹是为了方便演示。

[root@rhel55 linux]#join month_cn.txt month_en.txt 

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

[root@rhel55 linux]#

示例二 左连接(又称左外连接,显示左边所有记录)

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

[root@rhel55 linux]# join -a1 month_cn.txt month_en.txt  

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

13 十三月,故意的

[root@rhel55 linux]#

 

示例三 右连接(又称右外连接,显示右边所有记录)

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

[root@rhel55 linux]#join -a2 month_cn.txt month_en.txt 

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

14 MonthUnknown

[root@rhel55 linux]#

 

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

[root@rhel55 linux]# join -a1 -a2 month_cn.txt month_en.txt

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

13 十三月,故意的

14 MonthUnknown

[root@rhel55 linux]#

 

示例五 指定输出字段

比如参数 -o 1.1 表示只输出第一个文件的第一个字段。

[root@rhel55 linux]#join -o 1.1 month_cn.txt month_en.txt

1

2

3

4

5

6

7

8

9

10

11

12

[root@rhel55 linux]#join -o 1.1 2.2 month_cn.txt month_en.txt  

1 January

2 February

3 March

4 April

5 May

6 June

7 July

8 August

9 September

10 October

11 November

12 December

[root@rhel55 linux]#join -o 1.1 2.2 1.2 month_cn.txt month_en.txt

1 January 一月

2 February 二月

3 March 三月

4 April 四月

5 May 五月

6 June 六月

7 July 七月

8 August 八月

9 September 九月

10 October 十月

11 November 十一月

12 December 十二月

[root@rhel55linux]# join -o 1.1 2.2 1.21.3 month_cn.txt month_en.txt  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有