当前位置: 首页 > news >正文

用Linux命令对两个文件进行连接操作

数据库做两个表的连接操作很方便。如果不用数据库,用join命令也能做简单的连接操作。

首先,看一下join命令的功能

  join命令

  功能说明:
  将两个文件中,指定栏位内容相同的行连接起来。
  语法:join [-i][-a<1|2>][-e<string>][-o<格式>] [-t<字符>][-v<1|2>][-1<栏位>][-2<栏位>][--help] [--version][文件1][文件2]
  补充说明:
  找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
  参数:
  -a <1|2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
  -e <字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
  -i或--igore-case 比较栏位内容时,忽略大小写的差异。
  -o <格式> 按照指定的格式来显示结果。
  -t <字符> 使用栏位的分隔字符。
  -v <1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
  -1 <栏位> 连接[文件1]指定的栏位。
  -2 <栏位> 连接[文件2]指定的栏位。
  --help 显示帮助。
  --version 显示版本信息。
  指定输出字段:
  -o <FILENO.FIELDNO> ...
  其中fileno=1表示第一个文件,fileno=2表示第二个文件,fieldno表示字段序号,从1开始编号。默认会全部输出,但关键字列只输出一次。
比如:-o 1.1 1.2 2.2 表示输出第一个文件的第一个字段、第二个字段,第二个文件的第二个字段。

实例分析

  join命令相当于sql中的内连接,但使用join命令前要求要连接的列是排好序的,所以未排序的文件可以先用sort命令排序。

  sort命令说明:

  选项与参数:
  -f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
  -b  :忽略最前面的空格符部分;
  -M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
  -n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
  -r  :反向排序;
  -u  :就是 uniq ,相同的数据中,仅出现一行代表;
  -t  :分隔符,默认是用 [tab] 键来分隔;
  -k  :以那个区间 (field) 来进行排序的意思

 文件a.csv为

  -1,          id_1000453,computer_os_type_203,computer_browser_version_1421,
  handle_92449,  id_1000455,computer_os_type_201,computer_browser_version_1574
  handle_62344,  id_1000456,computer_os_type_203,computer_browser_version_377
  handle_105086,  id_1000458,computer_os_type_228,computer_browser_version_875

  文件b.csv为

  handle_92449,  id_1000455,computer_os_type_201,computer_browser_version_1574
  handle_59483,  id_1000456,computer_os_type_203,computer_browser_version_377

  首先,对a.csv和b.csv排序

   $ sort -t , a.csv > a_sorted.csv

   $ sort -t , b.csv > b_sorted.csv

  对两文件连接

  $ join -t , a_sorted.csv b_sorted.csv > a_b_row1_join.csv

 

转载于:https://www.cnblogs.com/lkprof/p/4652433.html

相关文章:

  • 一、小按钮和下面板---调试面板
  • memcached全面剖析–5. memcached的应用和兼容程序
  • 常见浏览器的兼容问题
  • 如何解决“不能打开数据库,用户NT AUTHORITY\NETWORK SERVICE登录失败”的错误呢?...
  • 基于vitamio的网络电视直播源码
  • Unity3D 导出apk 在真机调试时, 使用光贴图的模型丢失材质的BUG
  • 将C盘一个文本文件复制到D盘。
  • UVALive 6322 最大匹配...
  • 模板方法模式
  • Android Studio 简单介绍和使用问题小结
  • Redis内存存储结构分析
  • 数组删除空缺时的多余逗号
  • 图片验证
  • JDBC加载过程
  • 让DIV中文字换行显示
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • [数据结构]链表的实现在PHP中
  • [译]Python中的类属性与实例属性的区别
  • CentOS 7 修改主机名
  • Mysql数据库的条件查询语句
  • ReactNative开发常用的三方模块
  • tab.js分享及浏览器兼容性问题汇总
  • TCP拥塞控制
  • vue-router 实现分析
  • 读懂package.json -- 依赖管理
  • 近期前端发展计划
  • 聊聊flink的BlobWriter
  • 一道面试题引发的“血案”
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 自制字幕遮挡器
  • 06-01 点餐小程序前台界面搭建
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​低代码平台的核心价值与优势
  • ###C语言程序设计-----C语言学习(6)#
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (ZT)出版业改革:该死的死,该生的生
  • (第27天)Oracle 数据泵转换分区表
  • (九)One-Wire总线-DS18B20
  • (六)c52学习之旅-独立按键
  • (顺序)容器的好伴侣 --- 容器适配器
  • (已解决)什么是vue导航守卫
  • .NET 4.0中的泛型协变和反变
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NetCore项目nginx发布
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @ComponentScan比较
  • @Not - Empty-Null-Blank
  • @RequestParam详解
  • @SuppressWarnings(unchecked)代码的作用
  • [ 蓝桥杯Web真题 ]-布局切换
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [ARM]ldr 和 adr 伪指令的区别
  • [C++]C++基础知识概述
  • [cb]UIGrid+UIStretch的自适应