当前位置:首页>Linux>Linux基础 | join 命令使用指南(文本“表连接”神器)

Linux基础 | join 命令使用指南(文本“表连接”神器)

  • 2026-09-04 22:53:58
Linux基础 | join 命令使用指南(文本“表连接”神器)
在 Linux 文本处理工具链里,很多人熟悉:

grep(查找)

awk(处理字段)

sort(排序)

uniq(去重)

但有一个命令常被忽略——join。
如果你学过数据库,你会发现:join 本质上就是“文本版的表连接”。
今天,我们系统讲清楚 join 的使用方法和实战场景。

一、join 是干什么的?

join 的作用是:根据“共同字段”,合并两个文件的内容。
它类似 SQL 里的:
SELECT * FROM A JOIN B ON A.id = B.id;
但 join 处理的是文本文件。

二、join 的基本使用前提

非常关键的一点:两个文件必须按照连接字段排序。
否则结果可能不完整或错误。
例如我们有两个文件。
file1.txt

1 Tom

2 Jack

3 Lucy

file2.txt

1 90

2 85

3 88

这里第一列是共同字段(id)。

三、最基础用法

执行:
join file1.txt file2.txt
输出:

1 Tom 90

2 Jack 85

3 Lucy 88

解释:
默认按第一列匹配
输出顺序是:连接字段 + file1剩余字段 + file2剩余字段

四、指定连接字段

如果不是第一列怎么办?
假设 file1:

Tom 1

Jack 2

Lucy 3

file2:

1 90

2 85

3 88

这时需要指定字段:
join -1 2 -2 1 file1.txt file2.txt
参数解释:
-1 2:file1 用第2列匹配
-2 1:file2 用第1列匹配

五、排序是必须步骤

如果文件未排序,必须先执行:
sort file1.txt -k1,1sort file2.txt -k1,1
否则 join 可能匹配失败。
很多人踩坑就是因为:忘了排序。

六、只输出未匹配行(类似 LEFT JOIN)

join 默认是“内连接”。
如果想显示 file1 中未匹配的行:
join -a 1 file1.txt file2.txt
参数说明:
-a 1 表示输出 file1 中所有行
-a 2 表示输出 file2 中所有行
这类似数据库中的:
LEFT JOIN
RIGHT JOIN

七、指定输出字段

如果你不想输出全部字段,可以使用:
join -o 1.1,1.2,2.2 file1.txt file2.txt
格式说明:
1.1 表示 file1 的第1列
2.2 表示 file2 的第2列
这样可以灵活控制输出格式。

八、实际应用场景

场景 1:用户信息与成绩合并
例如:
一个文件是用户ID和姓名
一个文件是用户ID和积分
用 join 快速合并。
场景 2:日志匹配
文件A:请求ID + 时间
文件B:请求ID + 状态码
通过 join 生成完整记录。
场景 3:数据预处理
在数据分析前,用 join 合并多个文本数据源。

九、join vs awk 的区别

很多人会问:“为什么不用 awk?”
确实,awk 更灵活。
但 join 的优势在于:
  • 语法简单
  • 专门为“字段匹配”设计
  • 性能较高
  • 当需求只是“按字段合并”时,join 更直观。

十、常见参数总结

参数
作用
-1
指定 file1 连接字段
-2
指定 file2 连接字段
-a
输出未匹配行
-o
指定输出字段
-t
指定分隔符
例如 CSV 文件:
join -t ',' file1.csv file2.csv

十一、注意事项

1️⃣ 必须先排序
2️⃣ 默认按空格分隔
3️⃣ 默认只输出匹配行
掌握这三点,就不会出错。

总结

关于 join,你需要掌握:
  • 它是“文本表连接工具”

  • 必须排序

  • 支持指定字段

  • 支持类似 LEFT JOIN 的操作

在 Linux 文本处理体系中,join 是:结构化文本合并的高效工具。
如果你做日志分析、数据处理、脚本开发,join 是值得掌握的一把利器。
如果这篇对你有帮助,欢迎点赞、收藏、转发。
我们继续深入 Linux 基础命令系列。

最新文章

随机文章