Linux命令200例:join将两个文件按照指定的键连接起来分析

news2024/11/28 8:36:48

在这里插入图片描述

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于专栏:Linux命令大全。
🏆本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入讲解。欢迎提前锁定关注。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 一、简介
  • 二、语法
  • 三、实例解析
    • 3.1 例子 1
    • 3.2 例子 2
    • 3.2 例子 3
    • 3.4 例子 4
    • 3.5 例子 5
    • 3.6 例子 6
    • 3.7 例子 7
    • 3.8 例子 8
  • 四、总结


一、简介

Linux join 命令是一个可以将两个文件按照指定的键连接在一起的工具。它使用相同的字段值连接两个文件,并输出结果。join
命令适用于需要将多个文件进行联接的场景,通常与排序命令(如 sort)和文本处理命令(如 awk)结合使用。

二、语法

join 命令的基本语法为:

join [选项] 文件1 文件2

选项包括:

  • -a FILENUM:要显示文件中未关联的行。FILENUM 可以取值 1 或 2,分别表示未关联的行在文件1或文件2中。
  • -e EMPTY:用 EMPTY 来填充关联缺失的字段。默认情况下为空。
  • -t CHAR:指定字段之间的分隔符,默认为制表符。
  • -1 FIELD:以文件1的第 FIELD 字段作为键关联。
  • -2 FIELD:以文件2的第 FIELD 字段作为键关联。

三、实例解析

下面给出 8 个实际的例子来解释 join 命令的用法。

3.1 例子 1

假设有两个文件 file1.txt 和 file2.txt,它们的内容如下:

file1.txt:

1 Tom
2 Jerry
3 Alice

file2.txt:

1 English
2 Math
3 Science

要将这两个文件按第一个字段连接起来,可以使用如下的命令:

$ join file1.txt file2.txt

输出结果为:

1 Tom English
2 Jerry Math
3 Alice Science

join 命令默认以文件中的第一列作为连接键。

3.2 例子 2

如果文件中的键不是按顺序排列的,我们可以先对文件进行排序再进行连接。假设 file1.txt 和 file2.txt 的内容如下:

file1.txt:

2 Jerry
1 Tom
3 Alice

file2.txt:

3 Science
1 English
2 Math

可以使用以下命令进行连接:

$ join <(sort file1.txt) <(sort file2.txt)

输出结果为:

1 Tom English
2 Jerry Math
3 Alice Science

3.2 例子 3

有时候文件中的键可能包含重复项,这会导致连接结果中出现多个匹配。假设 file1.txt 和 file2.txt 的内容如下:

file1.txt:

1 Tom
2 Jerry
2 Alice

file2.txt:

2 English
2 Math
3 Science

可以使用以下命令进行连接:

$ join file1.txt file2.txt

输出结果为:

2 Jerry English
2 Jerry Math
2 Alice English
2 Alice Math

可以看到,重复的键会导致多次匹配。

3.4 例子 4

可以使用 -a 选项来显示未关联的行。假设 file1.txt 和 file2.txt 的内容如下:

file1.txt:

1 Tom
2 Jerry
3 Alice

file2.txt:

2 Math
3 Science
4 English

可以使用以下命令进行连接:

$ join -a 1 file1.txt file2.txt

输出结果为:

1 Tom
2 Jerry Math
3 Alice Science

可以看到,文件1中没有的键 4 English 并没有出现在输出结果中。

3.5 例子 5

可以使用 -e 选项来指定当关联缺失时要填充的内容。假设 file1.txt 和 file2.txt 的内容如下:

file1.txt:

1 Tom
2 Jerry
3 Alice

file2.txt:

2 Math
3 Science
4 English

可以使用以下命令进行连接:

$ join -e NA file1.txt file2.txt

输出结果为:

1 Tom NA
2 Jerry Math
3 Alice Science

可以看到,关联缺失的字段被填充为 “NA”。

3.6 例子 6

通过 -t 选项,可以指定字段之间的分隔符。假设 file1.txt 和 file2.txt 的内容如下:

file1.txt:

1,Tom
2,Jerry
3,Alice

file2.txt:

2,Math
3,Science
4,English

可以使用以下命令进行连接:

$ join -t , file1.txt file2.txt

输出结果为:

2,Jerry,Math
3,Alice,Science

可以看到,通过 -t 选项,我们将字段之间的分隔符指定为逗号。

3.7 例子 7

-1-2 选项可以用于指定连接的键位于文件中的哪一列。假设 file1.txt 和 file2.txt 的内容如下:

file1.txt:

Tom 1
Jerry 2
Alice 3

file2.txt:

English 1
Math 2
Science 3

可以使用以下命令进行连接:

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

输出结果为:

Tom 1 English
Jerry 2 Math
Alice 3 Science

可以看到,通过 -1-2 选项,我们分别指定了连接键所在的列。

3.8 例子 8

可以连接多个文件。假设 file1.txt、file2.txt 和 file3.txt 的内容如下:

file1.txt:

1 Tom
2 Jerry
3 Alice

file2.txt:

3 Science
1 English
2 Math

file3.txt:

1 Male
2 Male
3 Female

可以使用以下命令进行连接:

$ join file1.txt file2.txt file3.txt

输出结果为:

1 Tom English Male
2 Jerry Math Male
3 Alice Science Female

可以看到,多个文件会按照顺序依次连接。

四、总结

通过本文,我们详细了解了 Linux join 命令的用法及其选项。我们通过几个实际的例子来演示了如何使用 join 命令进行文件联接。join 命令对于需要在 Linux 系统上处理和分析多个文件时非常有用,可以帮助我们高效地处理数据和完成任务。本篇文章就到这里,我们下次见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十二、ESP32控制步进电机

1. 运行效果 2. 步进电机 最大特点:能够控制旋转一定的角度 3. 步进电机原理

P1433 吃奶酪(状态压缩dp)(内附封面)

吃奶酪 题目描述 房间里放着 n n n 块奶酪。一只小老鼠要把它们都吃掉&#xff0c;问至少要跑多少距离&#xff1f;老鼠一开始在 ( 0 , 0 ) (0,0) (0,0) 点处。 输入格式 第一行有一个整数&#xff0c;表示奶酪的数量 n n n。 第 2 2 2 到第 ( n 1 ) (n 1) (n1) 行…

研发工程师玩转Kubernetes——emptyDir

kubernets可以通过emptyDir实现在同一Pod的不同容器间共享文件系统。 正如它的名字&#xff0c;当Pod被创建时&#xff0c;emptyDir卷会被创建&#xff0c;这个时候它是一个空的文件夹&#xff1b;当Pod被删除时&#xff0c;emptyDir卷也会被永久删除。 同一Pod上不同容器之间…

报错Error: error:0308010C:digital envelope routines::unsupported

Error: error:0308010C:digital envelope routines::unsupported 解决&#xff1a; 在原有脚本前加&#xff1a; SET NODE_OPTIONS--openssl-legacy-provider && 原来&#xff1a; 加后&#xff1a;

常规VUE项目优化实践,跟着做就对了!

总结&#xff1a; 主要优化方式&#xff1a; imagemin优化打包大小&#xff08;96M->50M&#xff09;&#xff0c;但是以打包速度为代价&#xff0c;通过在构建过程中压缩图片来实现&#xff0c;可根据需求开启。字体压缩&#xff1a;目前项目内引用为思源字体&#xff0c…

Latex安装与环境配置(TeXlive、TeXstudio与VS code的安装)编译器+编辑器与学习应用

TeXlive 配置Tex排版系统需要安装编译器+编辑器。TeX 的源代码是后缀为 .tex 的纯文本文件。使用任意纯文本编辑器,都可以修改 .tex 文件:包括 Windows 自带的记事本程序,也包括专为 TeX 设计的编辑器(TeXworks, TeXmaker, TeXstudio, WinEdt 等),还包括一些通用的文本编…

对于git功能的探索与研究

读前提示 注意&#xff1a; 本文只是面向初学者或者之前并未接触过git而想学习如何初步使用git的读者&#xff0c;如果您很擅长使用git&#xff0c;并善于维护远程仓库&#xff0c;那么不建议您看此篇文章&#xff0c;这会浪费您的时间。 当然&#xff0c;这篇文章还是能很好地…

配置页面的路由

1.下载router npm i router 2.注册路由 文件路径 &#xff1a;src/router/index.js import Vue from "vue"; import VueRouter from "vue-router"; Vue.use(VueRouter); import Home from "../components/home.vue"; import Main from …

摄像机终端IP地址白名单配置流程

海康摄像头配置白名单流程 1.登录海康摄像机前端 2.进入配置-系统-安全管理-IP地址过滤 3.IP地址过滤方式选择“允许” 4.点击添加按钮输入对应的IP地址或者IP网段 5.最后勾选启用IP地址过滤&#xff0c;然后保存 大华摄像头配置白名单流程 1.登录大华摄像机前端 2.进入设…

openGauss学习笔记-33 openGauss 高级数据管理-视图

文章目录 openGauss学习笔记-33 openGauss 高级数据管理-视图33.1 语法格式33.2 参数说明33.3 示例 openGauss学习笔记-33 openGauss 高级数据管理-视图 视图与基本表不同&#xff0c;是一个虚拟的表。数据库中仅存放视图的定义&#xff0c;而不存放视图对应的数据&#xff0c…

【C高级】Day4 shell脚本 排序

1. 整理思维导图 2. 写一个函数&#xff0c;获取用户的uid和gid并使用变量接收 #!/bin/bash function getid() {uidid -ugidid -g }getid echo "uid$uid" echo "gid$gid"3. 整理冒泡排序、选择排序和快速排序的代码 #include <myhead.h>void Inp…

智慧物流园区整体架构方案【46页PPT】

导读&#xff1a;原文《智慧物流园区整体架构方案【46页PPT】》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取…

Python-面向对象:面向对象、成员方法 、类和对象、构造方法、魔术方法、封装、继承、类型注解、多态(抽象类(接口))

版本说明 当前版本号[20230806]。 版本修改说明20230806初版 目录 文章目录 版本说明目录知识总览图面向对象初识对象生活中数据的组织程序中数据的组织使用对象组织数据 成员方法类的定义和使用成员变量和成员方法成员方法的定义语法注意事项 类和对象现实世界的事物和类使…

Netty:ChannelInitializer添加到ChannelPipeline完成任务以后会自动删除自己

说明 io.netty.channel.ChannelInitializer是一个特殊的ChannelInboundHandler。它的主要作用是向 Channel对应的ChannelPipeline中增加ChannelHandler。执行完ChannelInitializer的initChannel(C ch)函数以后&#xff0c;ChannelInitializer就会从ChannelPipeline自动删除自己…

sklearn中使用决策树

1.示例 criterion可以是信息熵&#xff0c;entropy&#xff0c;可以是基尼系数gini # -*-coding:utf-8-*- from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split wineload_wine()# print ( wine.feature_…

Vue3 第四节 自定义hook函数以及组合式API

1.自定义hook函数 2.toRef和toRefs 3.shallowRef和shallowReactive 4.readonly和shallowReadonly 5.toRaw和markRaw 6.customref 一.自定义hook函数 ① 本质是一个函数&#xff0c;把setup函数中使用的Composition API 进行了封装,类似于vue2.x中的mixin 自定义hook函数…

Maven介绍-下载-安装-使用-基础知识

Maven介绍-下载-安装-使用-基础知识 Maven的进阶高级用法可查看这篇文章&#xff1a; Maven分模块-继承-聚合-私服的高级用法 文章目录 Maven介绍-下载-安装-使用-基础知识01. Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型…

F5 LTM 知识点和实验 12-使用规则和本地流量策略定制应用程序交付

第十一章:iapp(忽略) 第十二章:使用规则和本地流量策略定制应用程序交付 用最简单的术语来说,iRule是在网络流量通过BIGIP系统时对其执行的脚本。其思想非常简单:规则使您能够编写简单的网络感知代码片段,这些代码以各种方式影响您的网络流量。无论您是希望以BIG-IP内置…

SpringBoot 自动配置--常用配置

&#x1f600;前言 本篇博文是关于SpringBoot 自动配置的一些分享&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…

分布式任务调度平台——XXL-JOB

1、为什么需要任务调度平台 1.1、传统的定时任务实现方案不足 在Java中&#xff0c;传统的定时任务实现方案&#xff0c;比如Timer&#xff0c;Quartz等都或多或少存在一些问题&#xff1a; 不支持集群、不支持统计、没有管理平台、没有失败报警、没有监控等。在现在分布式的…