join命令的用法

简介:

join命令的用法
j o i n用来将来自两个分类文本文件的行连在一起。
下面讲述j o i n工作方式。这里有两个文件f i l e 1和f i l e 2,当然已经分类。每个文件里都有一些元素与另一个文件相关。由于这种关系, j o i n将两个文件连在一起,这有点像修改一个主文件,使之包含两个文件里的共同元素。
文本文件中的域通常由空格或t a b键分隔,但如果愿意,可以指定其他的域分隔符。一些系统要求使用j o i n时文件域要少于2 0,为公平起见,如果域大于2 0,应使用D B M S系统。
为有效使用j o i n,需分别将输入文件分类。
其一般格式为:

[Copy to clipboard] [ - ]
CODE:
join [options] input-file1 input-file2

QUOTE:
选项:
an n 为一数字,用于连接时从文件n中显示不匹配行。例如, - a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。
o n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。
j n m n为文件号,m为域号。使用其他域做连接域。
t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:。

现有两个文本文件,其中一个包含名字和街道地址,称为n a m e . t x t,另一个是名字和城镇,
为t o w n . t x t。

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat names.txt
M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd
K.Fletch 12 Woodlea

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat town.txt
M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
K.Firt Mitryl Mdt

连接两个文件
连接两个文件,使得名字支持详细地址。例如M . G o l l s记录指出地址为12 Hidd Rd。连接域为域0—名字域。因为两个文件此域相同, j o i n将假定这是连接域:

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF

缺省j o i n删除或去除连接键的第二次重复出现,这里即为名字域。

  1. 不匹配连接
    如果一个文件与另一个文件没有匹配域时怎么办?这时j o i n不可以没有参数选项,经常指定两个文件的- a选项。下面的例子显示匹配及不匹配域。

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -a1 -a2 names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
K.Firt Mitryl Mdt

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -a1 names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF

  1. 选择性连接
    使用- o选项选择连接域。例如要创建一个文件仅包含人名及城镇, j o i n执行时需要指定显示域。方式如下:

使用1 . 1显示第一个文件第一个域,2 . 2显示第二个文件第二个域,其间用逗号分隔。命令为:

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -o 1.1,2.2 names.txt town.txt
M.Golls Norwich
P.Willey Galashiels
T.Norms Brandon
K.Fletch Mildenhall

使用-jn m进行其他域连接,例如用文件1域3和文件域2做连接键,命令为:

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat pers
P.Jones Office Runner ID897
S.Round UNIX admin ID666
L.Clip Personl Chief ID982

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat pers2
Dept2C ID897 6 years
Dept3S ID666 2 years
Dept5Z ID982 1 year

文件p e r s包括名字、工作性质和个人I D号。文件p e r s 2包括部门、个人I D号及工龄。连接应使用文件p e r s中域4,匹配文件p e r s 2中域2,命令及结果如下:

[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -j1 4 -j2 2 pers pers2
ID897 P.Jones Office Runner Dept2C 6 years
ID666 S.Round UNIX admin Dept3S 2 years
ID982 L.Clip Personl Chief Dept5Z 1 year

使用j o i n应注意连接域到底是哪一个,比如说你认为正在访问域4,但实际上j o i n应该访问域5,这样将不返回任何结果。如果是这样,用a w k检查域号。例如,键入$ awk '{print $4}'文件名,观察其是否匹配假想域。

目录
相关文章
|
监控 网络协议 大数据
epoll中的ET和LT模式区别
epoll中的ET和LT模式区别
345 0
|
Java
Java中的全局变量和局部变量(看这篇就够了)
Java中的全局变量和局部变量(看这篇就够了)
896 0
|
人工智能 Serverless API
aliyun解决方案评测|主动式智能导购AI助手构建
《主动式智能导购AI助手构建》方案结合百炼大模型与函数计算,提供高效智能导购服务。然而,实际体验中发现官方教程的说明顺序有待优化,特别是关于百炼大模型服务开通及API-key的使用指引不够清晰,导致初次使用者需查阅额外资料。此外,架构设计和实践原理在部署过程中逐步展现,有助于理解,但针对生产环境的具体指导还需进一步完善以满足实际需求。为优化用户体验,建议调整文档中的步骤顺序,确保新手能更顺畅地完成部署和测试。
449 27
|
前端开发 JavaScript 数据挖掘
浅谈游戏地图中位置实时更新的技术方案
浅谈游戏地图中位置实时更新的技术方案
513 1
|
安全 网络安全 数据安全/隐私保护
python telnetlib详解
`telnetlib`模块允许你通过Telnet协议与远程设备进行交互,执行命令并获取响应。这在自动化网络设备配置、远程服务器管理等场景中非常有用。需要注意的是,由于Telnet协议不安全,推荐在安全网络环境下使用,或者考虑替代协议如SSH。
584 0
|
JavaScript 前端开发
如何使用JS实现轮播图
如何使用JS实现轮播图
204 0
tail查看nohup.out文件内容
tail查看nohup.out文件内容
352 0
|
缓存 监控 Java
Spring之AOP
Spring之AOP
190 0
|
SQL Python
Taskflow 有兴趣了解一下?
Taskflow 有兴趣了解一下?
549 0
|
存储 缓存 Java
JavaDictionary类的使用方法和示例
Java是一种广泛使用的编程语言,其强大的库和框架使得开发人员能够快速构建各种应用程序。在Java编程中,字典是一个十分有用的数据结构,它可以存储键值对,并提供快速的访问和查找。
654 0