• linux:使用comm命令比较两个文件:交集、差
    • comm命令可以按行比较两个排序好的文件,输出有3列:第一列是file1独有的、第二列是file2独有的,第三列是两者都有的,简单语法如下:NAMEcomm-comparetwosortedfileslinebylineSYNOPSIScomm[OPTION]...FILE1FILE2DESCRIPTIONComparesortedfilesFILE1andFILE2linebyline.Withnooptions,producethree-columnoutput.Colu

    • comm命令可以按行比较两个排序好的文件,输出有3列:第一列是file1独有的、第二列是file2独有的,第三列是两者都有的,简单语法如下:

      NAME
      comm - compare two sorted files line by line
      SYNOPSIS
      comm [OPTION]... FILE1 FILE2
      DESCRIPTION
      Compare sorted files FILE1 and FILE2 line by line.
      With no options, produce three-column output.Column one contains lines unique to FILE1, column two contains lines
      unique to FILE2, and column three contains lines common to both files.
      -1 suppress column 1 (lines unique to FILE1)
      -2 suppress column 2 (lines unique to FILE2)
      -3 suppress column 3 (lines that appear in both files)
      --check-order
      check that the input is correctly sorted, even if all input lines are pairable
      --nocheck-order
      do not check that the input is correctly sorted
      --output-delimiter=STR
      separate columns with STR
      示例:先从词典里按顺序随机抽取一些行导出到文件中,这样就省得排序了:
      aliyunzixun@xxx.com:/tmp$ sed -n '5p;1001p;3000p;4000p;5000p;7000p;8800p;9900p;10000p' /usr/share/dict/american-english > file1
      aliyunzixun@xxx.com:/tmp$ sed -n '2p;4000p;5000p;8888p;10000p;30000p;40000p' /usr/share/dict/american-english > aliyunzixun@xxx.com:/tmp$ cat file1
      ABM's
      Ashikaga's
      Charybdis's
      Decker
      Eurasia
      Idaho's
      Lipizzaner
      Meghan's
      Merck's
      aliyunzixun@xxx.com:/tmp$ cat file2
      A's
      Decker
      Eurasia
      Lombard's
      Merck's
      collaborated
      elms

      比较两个文件 
      aliyunzixun@xxx.com:/tmp$ comm file1 file2

      aliyunzixun@xxx.com:/tmp$ comm file1 file2
      A's
      ABM's
      Ashikaga's
      Charybdis's
      Decker
      Eurasia
      Idaho's
      Lipizzaner
      Lombard's
      Meghan's
      Merck's
      collaborated
      elms

      只显示file1独有的行: 
      需要把第2列和第3列去掉: 
      aliyunzixun@xxx.com:/tmp$ comm -2 -3 file1 file2 
      ABM's 
      Ashikaga's 
      Charybdis's 
      Idaho's 
      Lipizzaner 
      Meghan's只显示file2独有的行: 
      aliyunzixun@xxx.com:/tmp$ comm -1 -3 file1 file2 
      A's 
      Lombard's 
      collaborated 
      elms只显示两者重复的行: 
      aliyunzixun@xxx.com:/tmp$ comm -1 -2 file1 file2 
      Decker 
      Eurasia 
      Merck's只显示两者不重复的行: 
      后面的sed是将以/t开头的/t去掉: 
      aliyunzixun@xxx.com:/tmp$ comm -3 file1 file2 | sed 's/^/t//' 
      A's 
      ABM's 
      Ashikaga's 
      Charybdis's 
      Idaho's 
      Lipizzaner 
      Lombard's 
      Meghan's 
      collaborated 
      elms

comm 命令

comm命令可用于两个文件之间的比较。通过参数调整输出,可以执行交集、求差以及差集操作。

- 交集:打印出两个文件所有共同的行。

- 求差:打印出指定文件所包含的互不相同的那些行。

- 差集:打印出包含在文件A中,但不包含在其他指定文件中的那些行。

需要注意的是,comm必须使用经过排序的文件作为输入。在linux中可以使用sort命令实现排序。

comm实战

建立两个文本文件输入以下内容:


cat A.txt

apple

orange

gold

silver

steel

iron

cat B.txt

orange

gold

cookies

carrot

此时两个文件内的文本是乱序的,使用sort进行排序。

sort [option] [file] 参数 -o 要输出的文件。


sort A.txt -o A.txt;

sort B.txt -o B.txt;

(1) 首先执行不带任何选项的comm:


$ comm A.txt B.txt

apple

    carrot

    cookies

        gold

iron

        orange

silver

steal

输出的第一列包含中在A.txt中的行,第二列包含只在B.txt中出现的行,第三列包含同时包含两文件中相同的行。各列使用\t分隔。

(2) 为了打印两个文件的交集,我们需要删除第一列和第二列,只打印第三列:


$ comm A.txt B.txt -1 -2

gold

orange

(3) 打印出两个文件中不相同的行:


$ comm a.txt b.txt -3

apple

    carrot

    cookies

iron

silver

steal

(4) 为了提高输出结果的可用性,需要删除空白字段,将两列合并成一列:

借助sed命令格式化输出。

sed - stream editor for filtering and transforming text 字符流编辑


$ comm a.txt b.txt -3 | sed 's/^\t//'

apple

carrot

cookies

iron

silver

steal

sed 命令解释: sed命令通过管道获取comm的输出。它删除行首的\t字符。sed中的s表示替换substitute。/^\t/匹配行前的\t(^是行首标记).//是用来替换行首的/t的字符串。如此一来,就可以删除所有行首的\t.

linux:使用comm命令比较两个文件:交集、差的更多相关文章

  1. Linux下面使用命令如何运行.sh文件的两种解决办法

    Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh, ...

  2. linux中comm命令用法

    linux系统中comm命令用法详解 linux系统下的comm命令是一个非常实用的文件对比命令. comm命令功能:   选择或拒绝两个已排序的文件的公共的行. comm命令语法:comm [-12 ...

  3. 20155212 C语言实现linux下pwd命令的两种方法

    20155212 C语言实现linux下pwd命令的两种方法 学习pwd命令 通过man pwd命令查看 pwd [OPTION],一般不加参数 -P显示当前目录的物理路径 -L显示当前目录的连接路径 ...

  4. linux命令(50):comm命令的用法,求交集

    Linux comm命令 使用局限比较大,适用于特殊场合: Linux comm命令用于比较两个已排过序的文件. 排序:sort -u file 这项指令会一列列地比较两个已排序文件的差异,并将其结果 ...

  5. LINUX Shell 下求两个文件交集和差集的办法

    http://blog.csdn.net/autofei/article/details/6579320 假设两个文件FILE1和FILE2用集合A和B表示,FILE1内容如下: a b c e d ...

  6. linux diff-比较给定的两个文件的不同

    推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 diff命令在最简单的情况下,比较给定的两个文件的不同.如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入.diff命令是 ...

  7. Linux下用命令来执行kettle文件资源库的文件ktr与kjb的方法

    转载地址: https://blog.csdn.net/zuolovefu/article/details/78083445 1. 准备工作 一个简单的job,一个简单的trans. trans:读取 ...

  8. Linux中touch命令使用(创建文件)

    touch命令有两个功能: 1.用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来: 2.用来创建新的空文件. 语法 touch(选项)(参数) 选项 -a:或 ...

  9. diff命令--比较两个文件的命令

    可以使用 --brief 来比较两个文件是否相同,使用 -c参数来比较这两个文件的详细不同之处,这绝对是判断文件是否被篡改的有力神器,

随机推荐

  1. zhudongfangyu.exe进程是360主动防御进程,用来监控电脑系统,防止电脑病毒出现并阻止病毒或木马的安全进程

    zhudongfangyu.exe进程是360主动防御进程,用来监控电脑系统,防止电脑病毒出现并阻止病毒或木马的安全进程

  2. Linux内核设计与实现读书笔记(8)-内核同步方法【转】

    转自:http://blog.chinaunix.net/uid-10469829-id-2953001.html 1.原子操作可以保证指令以原子的方式执行——执行过程不被打断.内核提供了两组原子操作 ...

  3. (十一)__LINE__、__FUNCTION__的使用

    单片机中也可以用__LINE和__FUNCTION__进行异常信息打印,分别代表当前代码行数和当前代码函数名 printf("line:%d\r\n",__LINE__); pri ...

  4. linux 中解析命令行参数(getopt_long用法)

    linux 中解析命令行参数(getopt_long用法) http://www.educity.cn/linux/518242.html 详细解析命令行的getopt_long()函数 http:/ ...

  5. [转载]基于Redis的Bloomfilter去重(附Python代码)

    前言: “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比较大.去重需要考虑两个点:去重的数据量.去重速度.为了保持较快的去重速度,一般选择在内存中进行去重. 数据量不大时 ...

  6. 定制一个支持中英文的简单LaTex模板

    平常写汇报文档什么的,word排版有时还是比较费劲,遂定制一个简单的LaTex模板,中文默认为宋体,英文为LaTex默认字体,支持彩色高亮展示,有目录书签,有页眉展示,大致如下: LaTex代码如下: ...

  7. JS计算两个时间差的问题

    计算两个时间差的问题 function getDateIsMatching(){ var pactbegindate=$("#loanbegindate").datetimebox ...

  8. RBTree 红黑树

    红黑树 一.红黑树概述 红黑树不仅是一个二叉搜索树,并且满足以下规则: 1>每个节点不是红的就是黑的, 2>根结点为黑色, 3>如果节点为红色,其子节点必须为黑色, 4>任一节 ...

  9. 使用JQuery解析、处理JSON数据(应用在课程表)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 本地配置环境打开项目出现404/本地wampserver配置伪静态以及php.ini配置

    本地wamp/phpstudy实现虚拟主机后,出现了500错误看日志看到.htaccess: Invalid command ‘RewriteEngine’, perhaps misspelled o ...