两个文件比较之comm命令
comm命令可用于两个文件之间的比较。它有很多不错的选项可用来调整输出,以便我们执
行交集、求差(difference)以及差集操作。
交集:打印出两个文件所共有的行。
求差:打印出指定文件所包含的且互不相同的那些行。
差集:打印出包含在文件a中,但不包含在其他指定文件中的那些行。
假设现在有两个文件a和b,内容分别是:a(1,2,3),b(3,4,5)。那么,对这两个文件进行操作的结果如下。
交集:3。
求差:1,2,4,5。
差集(a):1,2。
需要注意的是comm必须使用排过序的文件作为输入。请看看下面的例子:
[root@host1 shell]# echo -e "1\n3\n8\n2" > a.txt
[root@host1 shell]# cat a.txt [root@host1 shell]# echo -e "1\n5\n7\n2" > b.txt
[root@host1 shell]# cat b.txt [root@host1 shell]# sort a.txt -o a.txt ; sort b.txt -o b.txt
(1) 首先执行不带任何选项的comm:
[root@host1 shell]# comm a.txt b.txt
输出的第一列包含只在a.txt中出现的行(a的差集),第二列包含只在b.txt中出现的行(b的差集),第三列
包含a.txt和b.txt中相同的行(交集)。各列以制表符(\t)作为定界符。
(2) 为了打印两个文件的交集,我们需要删除第一列和第二列,只打印出第三列:
[root@host1 shell]# comm - - a.txt b.txt
(3) 打印出两个文件中不相同的行:
[root@host1 shell]# comm - a.txt b.txt
在这次的输出中,那些唯一出现的行使得列中出现了空白字段。所以这两列在同一
行上不会同时都出现内容。为了提高输出结果的可用性,需要删除空白字段,将两
列合并成一列:
3
5
7
8
(4) 要生成规范的输出,得使用下面的命令:
[root@host1 shell]# comm - a.txt b.txt | sed 's/^\t//'
(5) 通过删除不需要的列,我们就可以分别得到a.txt和b.txt的差集。
a.txt的差集
$ comm a.txt b.txt -2 -3
-2 -3 删除第二列和第三列。
b.txt的差集
$ comm a.txt b.txt -1 -3
-1 -3 删除第一列和第三列。
工作原理:
comm的命令行选项可以按照需求对输出进行格式化,例如:
-1 从输出中删除第一列;
-2 从输出中删除第二列;
-3 从输出中删除第三列。
在生成统一输出时,sed命令通过管道获取comm的输出。它删除行首的 \t字符。sed中的s
表示替换(substitute)。/^\t/ 匹配行前的 \t(^是行首标记)。//(两个/操作符之间没有任何
字符)是用来替换行首的\t的字符串。如此一来,就删除了所有行首的\t。
差集操作允许你比较两个文件,打印出只在a.txt或b.txt中出现的行。当a.txt和b.txt作为comm
命令的参数时,输出中的第一列是a.txt相对于b.txt的差集,第二列是b.txt相对于a.txt的差集。
两个文件比较之comm命令的更多相关文章
- linux比较两个文件是否一样(linux命令md5sum使用方法)
1.简介 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一 ...
- linux 比较两个文件夹不同 (diff命令, md5列表)
比较文件夹diff,可以直接使用diff命令 [root@~]# diff -urNa dir1 dir2 -a Treat all files as text and compare them li ...
- linux:使用comm命令比较两个文件:交集、差
linux:使用comm命令比较两个文件:交集.差 comm命令可以按行比较两个排序好的文件,输出有3列:第一列是file1独有的.第二列是file2独有的,第三列是两者都有的,简单语法如下:NAME ...
- Linux comm命令求出文件的交集、差集
A(1,2,3)和B(3,4,5),A和B的交集是3,A对B的差集是1和2,B对A的差集是4和5,A和B求差的结果是1.2.4.5. 在Linux中可以使用comm命令求出这些集. [root@xue ...
- Shell 命令行求两个文件每行对比的相同内容
Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...
- 原!linux comm命令文件 比较 输出交集,差集。
文件内容大致如下: 112805|300011222483|OL海12卓|47397c33e36cdbed26637c50dd305973|2019-08-06 10:50:13|登B录123|suc ...
- diff命令--比较两个文件的命令
可以使用 --brief 来比较两个文件是否相同,使用 -c参数来比较这两个文件的详细不同之处,这绝对是判断文件是否被篡改的有力神器,
- linux中comm命令用法
linux系统中comm命令用法详解 linux系统下的comm命令是一个非常实用的文件对比命令. comm命令功能: 选择或拒绝两个已排序的文件的公共的行. comm命令语法:comm [-12 ...
- 两个文件去重的N种姿势
最近利用shell帮公司优化挖掘关键词的流程,用shell替代了多个环节的操作,极大提高了工作效率. shell在文本处理上确有极大优势,比如多文本合并.去重等,但是最近遇到了一个难搞的问题,即两个大 ...
随机推荐
- 06-移动端开发教程-fullpage框架
CSS3的新特性已经讲完了,接下来我们看一下jQuery的一个全屏jQuery全屏滚动插件fullPage.js.我们经常见到一些全屏的特绚丽页面,手指或者鼠标滑动一下就是一整屏切换,而且还有各种效果 ...
- python-装饰器简述
装饰器是什么 用来修饰别的函数的函数就可以称之为装饰器 这种函数的参数一般就是另外一个函数 也就是说,调用这种函数,需要给这种函数传参,且参数是函数 @语法糖 @语法糖一般用来表示装饰器函数 不用@也 ...
- UDP协议实现客户服务器数据交互
UDP协议实现客户服务器数据交互 按照往常一样将今天自己写的题目答案写在了博客上习题:客户端循环发送消息给服务端,服务端循环接收,并打印出来,直到收到Bye就退出程序. package network ...
- PHP模式设计之单例模式、工厂模式、注册树模式、适配器模式、观察者模式
php模式设计之单例模式 什么是单例模式? 单例模式是指在整个应用中只有一个实例对象的设计模式 为什么要用单例模式? php经常要链接数据库,如果在一个项目中频繁建立连接数据库,会造成服务器资源的很大 ...
- hadoop2.6.0实践:A01 问题处理 DEPRECATED: Use of this script to execute hdfs command is deprecated.
[hadoop@hadoop-master data]$ hadoop dfs -ls /DEPRECATED: Use of this script to execute hdfs command ...
- Linux下安装jmeter
一.用Xftp上传apache-jmeter-2.13.tgz到Linux系统里 二.解压apache-jmeter-2.13.tgz,tar xzfv apache-jmeter-2.13.tgz ...
- Modelsim的使用——复杂的仿真
相对于简单的仿真,复杂的仿真是指由多个文件.甚至调用了IP核.使用tcl脚本进行的仿真.其实仿真步骤跟图形化的差不多,只不过每一步用脚本写好,然后再在软件里面run一下,主要过程就是: 1.准备好各种 ...
- 通过java把excel内容上传到mysql
mysql 表列名 num1,num2,num3,num4,num5,num6 表名Excle 上传的方法 package com.web.connection; import java.io.Fi ...
- Python 生成随机验证码
Python生成随机验证码 Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 fro ...
- C# 枚举器
1:枚举器和可枚举类型 我们知道使用foreach可以遍历数组中的元素.那么为什么数组可以被foreach语句处理呢,下面我们就进行讨论一下这个问题. 2:使用foreach语句 我们知道当我们使用f ...