Linux join | 您所在的位置:网站首页 › 两个文件内容合并 › Linux join |
用途说明 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 实验室设备网 版权所有 |