两个文件比较之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在文本处理上确有极大优势,比如多文本合并.去重等,但是最近遇到了一个难搞的问题,即两个大 ...
随机推荐
- 12-TypeScript总结
从前面的文章大家可以看出,TypeScript具有先天的优势,建议前端开发人员使用TypeScript进行开发,提升自己的面向对象开发思想与能力.: 1.微软开源的客户端脚本语言,是JavaScrip ...
- 数据结构与算法 —— 链表linked list(02)
我们继续来看链表的第二道题,来自于leetcode: 两数相加 给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了 ...
- LeetCode & Q219-Contains Duplicate II
Array Hash Table Description: Given an array of integers and an integer k, find out whether there ar ...
- SpringBoot应用的前台目录
一.两个重要目录 templates:存放web页面的模板文件,需要在controller返回视图名称,框架转发才能找到的html. static :存放静态资源,如:html(放在这里可直接访问,如 ...
- SLF4J - 借助SLF4J, 统一适配所有日志实现为logback日志实现的实践
一.屏蔽各种日志实现,去掉各种日志实现的实现依赖 二.引入slf4j和各种日志实现的适配器 1.引入slf4j 2.引入各种日志实现的适配器(适配到slf4j) 3.引入logback 引入logba ...
- Python 编写登录接口
流程图: 源码:
- Android WebView那些坑之上传文件
最近公司项目需要在WebView上调用手机系统相册来上传图片,开发过程中发现在很多机器上无法正常唤起系统相册来选择图片. 解决问题之前我们先来说说WebView上传文件的逻辑:当我们在Web页面上点击 ...
- python/Django(增、删、改、查)操作
python/Django(增.删.改.查)操作 我们要通过pycharm中的Django模块连接MySQL数据库进行对数据的操作. 一.创建Django项目(每创建一个项目都要进行以下设置) 1.如 ...
- Hive:把一段包含中文的sql脚本粘贴到beeline client运行中文乱码
背景: 在做项目过程中不可能hive表中都是非中文字段.在最近做的项目中就遇到需要在beeline界面上执行查询脚本,但脚本中包含中文,正常一个脚本用文本写好后,粘贴到beeline窗口运行时,发现中 ...
- transition和animation做动画(css动画二)
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! translate:平移:是transform的一个属性: transform:变形:是一个静态属性,可以 ...