91传媒果冻传媒分类:探索视觉盛宴背后的精彩世界
概述Linux 中的join命令这个命令的核心作用是按“关键字段”将多个文件的行关联合并类似数据库的 JOIN 操作区别于paste仅按行号无脑拼接join会匹配两个文件中关键字段相同的行再横向合并是处理结构化文本如 CSV、日志、数据清单的核心工具。
资料合集https://pan.quark.cn/s/6fe3007c3e
https://pan.quark.cn/s/561de99256a
https://pan.quark.cn/s/985f55b13d
https://pan.quark.cn/s/d0fb20abd19a
核心前提必看使用join的硬性要求待合并的文件必须按关键字段排序否则无法正确匹配默认以第一列作为关键字段可通过选项指定其他列仅支持两个文件的合并多文件需多次拼接字段默认用空格/制表符分隔可自定义分隔符。
基本语法join[选项]文件1 文件2无选项时默认按第一列关键字合并输出“关键字 文件1剩余列 文件2剩余列”支持-作为文件参数代表读取标准输入。
常用选项按功能分类join的选项围绕“关键字段、分隔符、匹配规则”设计覆盖数据库 JOIN 的核心逻辑选项分类选项作用实用场景关键字段配置-1 N指定文件1的第N列作为关键字文件1关键字不在第一列时如第3列是用户ID-2 N指定文件2的第N列作为关键字文件2关键字不在第一列时分隔符配置-t 字符指定字段分隔符默认空格/制表符处理CSV文件分隔符为逗号、竖线分隔的文本-o 格式自定义输出列如
1
2代表文件1第1列文件2第2列仅输出需要的列避免冗余匹配规则核心-a 数字显示指定文件的“不匹配行”-a1文件1所有行-a2文件2所有行实现 LEFT/RIGHT JOIN 效果-v 数字仅显示指定文件的“不匹配行”-v1仅文件1不匹配行找两个文件的差异行-e 字符串用指定字符串填充空列配合-a使用统一空值显示如用“N/A”替代空
基础示例先理解核心逻辑先准备两个已排序的结构化文件模拟用户信息和订单信息# file
txt用户信息ID 姓名 年龄关键字ID 1 张三 25 2 李四 30 3 王五 28 4 赵六 35 # file
txt订单信息ID 订单号 金额关键字ID 1 OD001 100 2 OD002 200 3 OD003 150 5 OD005 300场景1默认合并INNER JOIN仅输出关键字ID在两个文件中都存在的行joinfile
txt file
txt输出结果关键字file1剩余列file2剩余列1 张三 25 OD001 100 2 李四 30 OD002 200 3 王五 28 OD003 150赵六ID
ID5 因仅在单个文件存在被过滤这就是数据库的 INNER JOIN。
场景2LEFT JOIN显示文件1所有行用-a1保留文件1的所有行无匹配时补空join-a1 file
txt file
txt输出结果1 张三 25 OD001 100 2 李四 30 OD002 200 3 王五 28 OD003 150 4 赵六 35赵六ID4无订单订单列为空ID5 仍不显示仅保留文件1所有行。
场景3FULL JOIN显示所有行组合-a1 -a2实现全连接配合-e N/A填充空值join-a1 -a2 -eN/Afile
txt file
txt输出结果1 张三 25 OD001 100 2 李四 30 OD002 200 3 王五 28 OD003 150 4 赵六 35 N/A N/A 5 N/A N/A OD005 300场景4仅显示不匹配行找差异用-v1仅显示文件1独有的行-v2仅显示文件2独有的行# 仅文件1独有的行赵六join-v1 file
txt file
txt# 输出4 赵六 35# 仅文件2独有的行ID5join-v2 file
txt file
txt# 输出5 OD005 300
进阶实操处理CSV/自定义关键字场景1处理CSV文件逗号分隔准备CSV文件需先排序# user.csvID,姓名,城市 1,张三,北京 2,李四,上海 3,王五,广州 # order.csv订单号,用户ID,金额 OD001,1,100 OD002,2,200 OD003,3,150 OD005,5,300步骤1先按关键字排序order.csv的关键字是第2列需先排序# 对order.csv按第2列用户ID排序保存为sorted_order.csvsort-t,-k2order.csvsorted_order.csv步骤2指定分隔符自定义关键字自定义输出列# -t ,分隔符为逗号# -1 1file1user.csv关键字是第1列# -2 2file2sorted_order.csv关键字是第2列# -o
2,
3,
1,
3输出列姓名、城市、订单号、金额join-t,-
-o
2,
3,
1,
3 user.csv sorted_order.csv输出结果CSV格式张三,北京,OD001,100 李四,上海,OD002,200 王五,广州,OD003,150场景2管道配合实时处理命令输出将两个命令的输出按关键字合并用-代表标准输入# 模拟生成已排序的用户ID消费额与file
txt合并echo-e1 500\n2 800\n3 600|join-
file
txt -输出结果1 张三 25 500 2 李四 30 800 3 王五 28 600
关键
注意事项排序是前提文件未排序会导致匹配失败排序时需和join用相同的分隔符如CSV用sort -t , -k N分隔符统一若文件中字段分隔符是多个空格/制表符混合可先用tr -s 压缩为单个空格关键字唯一若关键字重复join会按笛卡尔积合并如文件1ID1有2行文件2ID1有3行会生成6行空值处理无匹配的列默认为空用-e可自定义填充值需配合-a使用才生效二进制文件仅支持文本文件不支持二进制文件如压缩包、镜像。
与paste/cat的核心区别必分清命令合并逻辑核心前提适用场景join按关键字段匹配合并数据库JOIN文件需按关键字排序关联结构化数据用户订单、ID信息paste按行号无脑列拼接无前提简单列合并姓名年龄职业cat按顺序纵向行拼接无前提合并文件行日志片段、文本片段
总结join是结构化文本的关联合并工具
核心价值是按关键字匹配行日常高频用法基础内连接join 文件1 文件2左/右连接join -a1/-a2 -e N/A 文件1 文件2找差异行join -v1/-v2 文件1 文件2处理CSVjoin -t , -1 N -2 M 文件1 文件2自定义输出列join -o
X,
Y 文件1 文件2
soulai钻石兑换码最新版下载-soulai钻石兑换码最新版下载应用