3.3 文本文件的交集与差集

《Linux Shell 脚本攻略(第 2 版)》读书笔记

comm 命令可用于两个文件之间的比较。可执行如下操作

  • 交集(intersection):打印出两个文件所共有的行。
  • 求差(difference):打印出指定文件所包含的且互不相同的那些行。
  • 差集(set difference):打印出包含在文件 A 中,但不包含在其他指定文件中的那些行。

注意comm必须使用排过序的文件作为输入。

现有 A.txt、B.txt 两个文件

$ sort A.txt -o A.txt ; sort B.txt -o B.txt # 排序
$ cat A.txt
apple
gold
iron
orange
silver
steel
$ cat B.txt
carrot
cookies
gold
orange

执行不带任何选项的 comm 命令

$ comm A.txt B.txt
apple
        carrot
        cookies
                gold
iron
                orange
silver
steel
  • 第一列,包含只在 A.txt 文件中出现的行。
  • 第二列,包含只在 B.txt 文件中出现的行。
  • 第三列,包含 A.txt 和 B.txt 中相同的行。
  • 各列以制表符(\t)作为定界符。

打印两个文件的交集

$ comm -1 -2 A.txt B.txt
gold
orange
  • -1 删除第一列
  • -2 删除第二列

打印两个文件中不相同的行(求差)

$ comm -3 A.txt B.txt
apple
        carrot
        cookies
iron
silver
steel

# 生成规范的输出
$ comm -3 A.txt B.txt | sed 's/^\t//'
apple
carrot
cookies
iron
silver
steel

# OS X 用下面这个命令
$ comm -3 A.txt B.txt | tr "\t" "\0"

sed 's/^\t//':sed 是一个“非交互式的”面向字符流的编辑器。

  • s 表示替换(substitute)。
  • /^\t/ 匹配行前的\t^是行首标记)。
  • // 用来替换行首的\t

差集

  • A.txt 的差集
$ comm -2 -3 A.txt B.txt
# 删除第二列和第三列
  • B.txt 的差集
$ comm -1 -3 A.txt B.txt
# 删除第一列和第三列
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问题描述 对于两个同处在一个集群的hive表,进行文件或者数据的对比是非常方便的,直接写个关联查询就可以搞定。然而...
    那只媛阅读 7,092评论 0 5
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,635评论 0 0
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,250评论 0 10
  • 乌云密谋吞噬烈日的光热 蜻蜓大军无声地亮出利刃 准备截杀随风的昆虫 黄土地的麦芒都裹上了金属的光泽 超出货箱体积的...
    指尖ksq阅读 453评论 6 8
  • 盛夏酷暑,也许是最后一个暑假了,已经过去大半。从最初未放假开始,就设想了各种打算、安排。由于今年上半年确定了...
    gxwang阅读 318评论 0 0

友情链接更多精彩内容