linux: join

功能:

“将两个文件里指定栏位同样的行连接起来”,即依照两个文件里共有的某一列,将相应的行拼接成一行。
join [options] file1 file2
注:这两个文件必须在已经在此列上是依照同样的规则进行了排序。

选项

-a FILENUM:除了显示匹配好的行另外将指定序号(1或2)文件里部匹配的行显示出来
-e EMPTY:将须要显示可是文件里不存在的域用此选项指定的字符取代
-i :忽略大写和小写
-j FIELD :等同于 -1 FIELD -2 FIELD,-j指定一个域作为匹配字段
-o FORMAT:以指定格式输出
-t CHAR :以指定字符作为输入输出的分隔符
join 默认以空白字符做分隔符(空格和\t),能够使用 join -t $'\t'来指定使用tab做分隔符
-v FILENUM:与-a相似 但值显示文件里没匹配上的行
-1 FIELD:以file1中FIELD字段进行匹配
-2 FIELD:以file2中FIELD字段进行匹配
--help :打印命令帮助文件

样例:

文件 file1.txt

aa 1 2
bb 2 3
cc 4 6
dd 3 3

文件file2.txt

aa 2 1
bb 8 2
ff 2 4
cc 4 4
dd 5 5
1.join file1.txt file2.txt

输出:
aa 1 2 2 1
bb 2 3 8 2

默认已两个文件的第一行做匹配字段,默认以空格(不限个数)做分隔符。

2.join -j 1 file1.txt file2.txt

输出:
aa 1 2 2 1
bb 2 3 8 9

-j选项 指定了以两个文件里第一列做匹配字段 等同于join file1.txt file2.txt

3. join -1 2 -2 3 file1.txt file2.txt

输出:
1 aa 2 aa 2
2 bb 3 bb 8
4 cc 6 ff 2
4 cc 6 cc 4
以第一个文件的第二列和第二个文件的第三列做匹配字段。因为第二个文件里第三列的两个3 都与第一个文件里第三行因此输出
4 cc 6 ff 2
4 cc 6 cc 4

4. join -o 1.1 -o 1.2 -o 1.3 -o 2.1 -o 2.2 -o 2.3 -e 'empty' -a 1 file1.txt file2.txt

输出:
aa 1 2 aa 2 1
bb 2 3 bb 8 2
cc 4 6 empty empty empty
dd 3 3 empty empty empty

-o 指定 将file1的1,2,3列,file2的1,2,3 列都输出。-a指定将file1中不匹配的行也输出,可是file2中沒有与file1后两行相应的字段,因此使用empty补齐。

5.join -v 1 file1.txt file2.txt

输出:
cc 4 6
dd 3 3

-v 1 将file1中不匹配的行输出

PS:join命令和数据库中的join命令很相似。
尽管file1和file2都已经排序,可是因为在第三行时開始不匹配因此仅仅匹配上了前两行,后面的行尽管字段也能够相应可是以不能匹配。join命令,对文件格式的要求很强,假设想要更灵活的使用,可用AWK命令,參加AWK实例

6. join 标准输入

有时我们须要将多个格式同样的文件join到一起,而join接受的是两个文件的指令,此时我们能够使用管道和字符“-"来实现
join file1 file2 | join - file3 | join - file4
这样就能够将四个文件 连接到 一起了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文笔记源自这里——[实验楼]欢迎大家在下面交流其中有问题的地方喜欢请点收藏,每日更新(全部已亲自实践). 一. ...
    东皇Amrzs阅读 4,037评论 7 54
  • 这篇文章翻译自http://www.thegeekstuff.com/2010/11/50-linux-comma...
    sufun_wu阅读 760评论 0 4
  • 系统信息cat /etc/os-release 查看系统详细信息(只在centos和redhat上试过生效)arc...
    MicoCube阅读 707评论 0 0
  • 不想说再见,也许时间不留情面 寒暄太久,泪水太多,一晃而过三年 记得初次见面,我们稚气在表面 书本太多,欢乐太多,...
    清浅白芷阅读 226评论 0 1
  • —有的时候,我能清晰地感觉到有什么东西在我的心上划过了,它叫无能为力。— 你是否也有过这样的经历,别人无意间的一句...
    嫣然子阅读 231评论 0 0