我使用过的Linux命令之join - 根据关键字合并数据文件

我使用过的Linux命令之join - 根据关键字合并数据文件

本文链接:http://codingstandards.iteye.com/blog/796299   (转载请注明出处)

 

用途说明

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 identical join fields, write a line to standard output.  The default join field is the first, delimited by whitespace.  When FILE1 or FILE2 (not both) is -, read standard input.)

内连接(inner join)                                      格式:join <FILE1> <FILE2>

左连接(left join, 左外连接, left outer join)     格式:join -a1 <FILE1> <FILE2>

右连接(right join, 右外连接,right outer join)  格式:join -a2 <FILE1> <FILE2>

全连接(full join, 全外连接, full outer join)      格式:join -a1 -a2 <FILE1> <FILE2>

 

指定分隔符:

-t <CHAR>

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

 

指定输出字段:

-o <FILENO.FIELDNO> ...

其中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@rhel55 linux]# join -o 1.1 2.2 1.2 1.3 month_cn.txt month_en.txt   <== 字段1.3并不存在
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 -t ':' /etc/passwd /etc/shadow
root:x:0:0:root:/root:/bin/bash:$1$K8WSIAfQ$9i1h6a4V1XeIn0lv.CT53/:14833:0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin:*:14833:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:14833:0:99999:7:::
adm:x:3:4:adm:/var/adm:/sbin/nologin:*:14833:0:99999:7:::
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin:*:14833:0:99999:7:::
sync:x:5:0:sync:/sbin:/bin/sync:*:14833:0:99999:7:::
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown:*:14833:0:99999:7:::
halt:x:7:0:halt:/sbin:/sbin/halt:*:14833:0:99999:7:::
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin:*:14833:0:99999:7:::
news:x:9:13:news:/etc/news::*:14833:0:99999:7:::
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin:*:14833:0:99999:7:::
operator:x:11:0:operator:/root:/sbin/nologin:*:14833:0:99999:7:::
games:x:12:100:games:/usr/games:/sbin/nologin:*:14833:0:99999:7:::
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin:*:14833:0:99999:7:::
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin:*:14833:0:99999:7:::
nobody:x:99:99:Nobody:/:/sbin/nologin:*:14833:0:99999:7:::
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin:!!:14833:0:99999:7:::
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin:!!:14833:0:99999:7:::
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin:!!:14833:0:99999:7:::
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin:!!:14833:0:99999:7:::
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin:!!:14833:0:99999:7:::
pcap:x:77:77::/var/arpwatch:/sbin/nologin:!!:14833:0:99999:7:::
ntp:x:38:38::/etc/ntp:/sbin/nologin:!!:14833:0:99999:7:::
dbus:x:81:81:System message bus:/:/sbin/nologin:!!:14833:0:99999:7:::
avahi:x:70:70:Avahi daemon:/:/sbin/nologin:!!:14833:0:99999:7:::
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin:!!:14833:0:99999:7:::
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin:!!:14833:0:99999:7:::
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin:!!:14833:0:99999:7:::
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin:!!:14833:0:99999:7:::
avahi-autoipd:x:100:101:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin:!!:14833:0:99999:7:::
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin:!!:14833:0:99999:7:::
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin:!!:14833:0:99999:7:::
gdm:x:42:42::/var/gdm:/sbin/nologin:!!:14833:0:99999:7:::
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin:!!:14833:0:99999:7:::
oracle:x:500:500::/opt/oracle:/bin/bash:$1$v64Pa.m.$GZMrQiOWCdQPF8XKtWju30:14833:0:99999:7:::
mysql:x:101:104:MySQL server:/var/lib/mysql:/bin/bash:!!:14866::::::
[root@rhel55 linux]#

问题思考

1. 怎样使用join命令实现两个文件中关键字的交集、并集、差集?

2. 怎样使用join命令中指定关键字的列,而非默认的第一列?

相关资料

【1】甜菜与咸菜 缺哪补哪,用技术武装自信 linux 的join命令--总结

【2】动态网站制作指南 深入浅出SQL之左连接、右连接和全连接

 

返回 我使用过的Linux命令系列总目录

 

基于Codex/Claude Code的学术技能包:13个Skill实现科研全流程自动化 写论文最头疼的是什么?是面对海量文献无从下手,还是实验数据一团乱麻,或者是好不容易有了结果,却卡在写作和格式调整上?如果你也经历过从选题到投稿的完整科研周期,就会明白每个环节都可能消耗大量时间精力。今天要分享的这套工具链,正是为了解决这些痛点而生——基于 Codex 和 Claude Code 平台的学术技能包(Academic Skills),它通过 13 个精心设计的 Skill,将一篇论文从 0 到 1 的全流程自动化、标准化,让你能更专注于研究本身。 这套技能包并非单一工具,而是一个覆盖文献阅读、数 阅读详情

相关推荐

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1349

shell基础--- wc命令

linux shell wc命令 wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。 语法:wc[选项]文件… 说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。 该命令各选项含义如下: -c统计字节数。 -l统计行数。 -w统计字数。 这些选项可以组合使用。 输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。...

会哭的雨@的博客 4600

《Mac 配置 Codex App 代理完整指南:端口检测 + launchctl 设置 + 取消代理》

本文详细介绍 Mac 上 Codex App 代理配置完整流程,包括如何查看代理端口、如何使用 launchctl 设置 HTTP_PROXY / HTTPS_PROXY、如何验证代理是否生效以及如何取消代理配置。适用于 Mac Codex 代理、Mac HTTP_PROXY 设置、Mac ChatGPT 代理等开发环境场景。

weixin_50029578的博客 5333

join 命令:合并文件

​join​ 命令用于合并两个文件,基于一个共同的键(key)字段,将一个文件中的行与另一个文件中的行合并在一起。这个键字段在两个文件中必须是相同的,这样 join 才能正确地将行匹配在一起。‍。

qq_38641599的博客 702

Jetson设备EXT4文件系统修复实战:从superblock损坏到系统恢复

本文详细介绍了Jetson设备因异常断电等原因导致EXT4文件系统superblock损坏后的诊断与修复实战。通过从健康设备移植fsck工具、使用备份超级块等步骤,指导用户逐步恢复系统,并提供了数据备份与预防措施,帮助用户有效应对嵌入式AI开发中的存储故障。

theta的博客 591

洛奇 服务器文件,MabinogiG20S2 [洛奇G20服务端]

Code:Titles:>set_title /id: /add /remove Parameters for titles>set_title /id:60001 /add add devcat title>set_title /id:60001 /remove remove devcat title===========================...

weixin_30813385的博客 4301

Linux-join的详细使用

join命令是一个非常实用的工具,它可以将两个文件按照指定的字段连接起来。在实际使用中,我们需要根据具体的需求选择不同的选项,并且需要注意文件中的字段分隔符和大小写等问题。

qq_51010919的博客 2667

MCGS 和 200SMART 时间同步

在实际应用中,PLC经常会因为断电原因,导致时间不准确。假设我们设置了一个投加泵,每天8-18点投加。屏幕上显示的时间和PLC内部的时间,很可能不一样。所以需要在触摸屏上读取PLC的时间,并且提供设置功能。

mmxxoo_xxmmp的博客 1519

【Shell 命令集合 文本处理工具】Linux 字段连接 join 命令使用指南

join命令是Linux系统中的一个文本处理工具,它用于将两个文件的行按照共同的字段连接起来。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1461

上、下拉电阻(定义、强弱上拉、常见作用、吸电流、拉电流、灌电流)

1.上、下拉电阻定义 上拉电阻是把一个信号通过一个电阻接到电源(Vcc),下拉电阻是一个信号通过一个电阻接到地(GND)。 2.强上拉、弱上拉 强上拉、弱上拉的强弱只是上拉电阻的阻值不同,没有什么严格区分。例如:50Ω上拉,一般成为强上拉;100kΩ上拉则称为弱上拉。下拉也是一样的。强拉电阻的极端就是0Ω电阻,即将信号线直接与电源或低相连接。 3.上、下拉电阻的作用 因为上下拉电阻的作用概念很宽泛,不用领域的使用方法也不同,常见使用方法整理如下: ...

小浪宝宝的博客 3万+

深度学习论文: Towards Total Recall in Industrial Anomaly Detection

在大规模工业制造中,能够准确检测出有缺陷的零件至关重要。我们在这项工作中面临的一个特殊挑战是冷启动问题:仅使用正常的示例图像来训练模型。虽然可以针对每个类别手动设计解决方案,但我们的目标是构建能够自动适用于多个任务的系统。最佳的方法是将ImageNet模型的嵌入特征与异常检测模型结合起来。在本文中,我们在这一研究基础上进行了扩展,并提出了PatchCore,它利用了一个具有最大代表性的正常补丁特征内存库。通过这种方法,我们能够更好地解决冷启动问题,并提高系统在多任务上的性能。

mingo_敏 1875

shell中的join命令

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

qq_42024433的博客 1451

Openclaw 附录B 常用Skills清单

核心作用支持URL、网页、PDF、图片、音频和YouTube视频的摘要与字幕提取,由OpenClaw创始人@steipete开发的官方内置Skill。安装⚠️说明:原推荐的summarize未在ClawHub验证到,YouTube字幕提取功能已内置于summarize中。使用场景“提取这个2小时Next.js教程视频的核心代码逻辑,按章节整理成学习笔记”推荐指数:⭐⭐⭐⭐。

Maynor的博客 857

Linux join --根据关键字合并数据文件

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

老莫小小朋友 3192

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Linux 命令:join

Linux 命令:join

闲余知道 987

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux命令之join - 根据关键字合并数据文件(Z)

Linux命令之join - 根据关键字合并数据文件(Z)   2014-06-12 09:39:43|  分类: shell |  标签:shell  join  |举报|字号 订阅 本文链接:http://codingstandards.iteye.com/blog/796299   (转载请注明出处) 用途说明 Linux下最常用的数据文件格式是文本格

水滴石穿 4607

Linux命令之join - 根据关键字合并数据文件

我使用过的Linux命令之join - 根据关键字合并数据文件 本文链接:http://codingstandards.iteye.com/blog/796299   (转载请注明出处)   用途说明 Linux下最常用的数据文件格式是文本格式的,多个字段之间通过分隔符来区分,分隔符比如冒号(:)、制表符、空格等。/etc/passwd和/etc/group就是用:来分隔的,用MySQ...

给我一点时间 283

学习使用shell中的join命令

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

流浪天空 4806

【Linux】一步一步学Linux——join命令(56)

00. 目录 文章目录00. 目录01. 命令概述02. 命令格式03. 常用选项04. 参考示例05. 附录 01. 命令概述 join命令用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。 注意:join在对两个文件进行连接时,两个文件必须都是按照连接域排好序的,按其他域排序是无效的。 02. 命令格式 用法:join [选...

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 7340

linux txt a 分隔符,Linux基础命令:文本处理工具之join , paste

大纲1、join 介绍2、join 语法格式3、join 实战演示4、paste 命令版本信息版本信息join (GNU coreutils) 8.4paste (GNU coreutils) 8.4一、join 介绍Linux下最常用的数据文件、配置文件的格式都是文本(ASCII)格式的(一切皆文本),使用分隔符来区分不同的字段,比如冒号(:)、制表符、空格等。像常见的/etc/passwd和/...

weixin_35782323的博客 661

linux下的join命令使用方法

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

xiaoai5821的专栏 1035

Linux重要命令-join(按两个文件的相同字段合并)

功能说明:将两个文件中,指定栏位内容相同的行连接起来。 语  法:join [-i][-a<1或2>][-e<字符串>][-o<格式>] [-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][--help] [--version][文件1][文件2] 补充说明:找出两个文件中...

lucy123_的博客 6326

Linux Shell 中的 join 命令:高效关联数据的实用工具

需求:关联后只输出“姓名、科目、分数”,不输出学号。张三 数学 90李四 语文 85王五 数学 95表示输出文件1的第2字段(姓名)、文件2的第2字段(科目)、文件2的第3字段(分数)。join 命令是 Linux Shell 中一个高效的文本关联工具,虽然功能不如数据库的 JOIN 操作强大,但在处理小型文本文件的关联场景中,它无需依赖数据库环境,操作简单高效,能够极大提升文本数据处理的效率。核心要点是记住“先排序,再关联”的原则,熟练掌握-t-1/-2-a-o。

CharlesYuangc的博客 720

目前为止看到的关于linux下join指令解释最清楚的文章

用途说明 Linux下最常用的数据文件格式是文本格式的,多个字段之间通过分隔符来区分,分隔符比如冒号(:)、制表符、空格等。/etc/passwd和 /etc/group就是用:来分隔的,用MySQL的into outfile指令导出的数据通常是以制表符分隔的。这种文本格式

1212
上一篇: 我使用过的Linux命令之bc - 浮点计算器、进制转换
下一篇: 我使用过的Linux命令之complete - 强劲的bash参数补全功能
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值