linux:使用comm命令比较两个文件:交集、差
- 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 file2aliyunzixun@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命令比较两个文件:交集、差的更多相关文章
- Linux下面使用命令如何运行.sh文件的两种解决办法
Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh, ...
- linux中comm命令用法
linux系统中comm命令用法详解 linux系统下的comm命令是一个非常实用的文件对比命令. comm命令功能: 选择或拒绝两个已排序的文件的公共的行. comm命令语法:comm [-12 ...
- 20155212 C语言实现linux下pwd命令的两种方法
20155212 C语言实现linux下pwd命令的两种方法 学习pwd命令 通过man pwd命令查看 pwd [OPTION],一般不加参数 -P显示当前目录的物理路径 -L显示当前目录的连接路径 ...
- linux命令(50):comm命令的用法,求交集
Linux comm命令 使用局限比较大,适用于特殊场合: Linux comm命令用于比较两个已排过序的文件. 排序:sort -u file 这项指令会一列列地比较两个已排序文件的差异,并将其结果 ...
- LINUX Shell 下求两个文件交集和差集的办法
http://blog.csdn.net/autofei/article/details/6579320 假设两个文件FILE1和FILE2用集合A和B表示,FILE1内容如下: a b c e d ...
- linux diff-比较给定的两个文件的不同
推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 diff命令在最简单的情况下,比较给定的两个文件的不同.如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入.diff命令是 ...
- Linux下用命令来执行kettle文件资源库的文件ktr与kjb的方法
转载地址: https://blog.csdn.net/zuolovefu/article/details/78083445 1. 准备工作 一个简单的job,一个简单的trans. trans:读取 ...
- Linux中touch命令使用(创建文件)
touch命令有两个功能: 1.用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来: 2.用来创建新的空文件. 语法 touch(选项)(参数) 选项 -a:或 ...
- diff命令--比较两个文件的命令
可以使用 --brief 来比较两个文件是否相同,使用 -c参数来比较这两个文件的详细不同之处,这绝对是判断文件是否被篡改的有力神器,
随机推荐
- 微信小程序登录流程图
一. 官方登录时序图 官方的登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端- 微信服务器端 1. 客户端获得code,并 ...
- 遍历文档内容,得到HTML层级结构
嗯..没发现有写好的,那就自己写一个,刚好自己今天看了DOM操作的知识点,巩固一下. HTML可以表示为一个层次结构,生成的DOM Tree 就是类似与数据结构中的树一样,每个DOM节点都有它的chi ...
- Spring --- 异常处理机制
1.定义全局异常处理器,为全局的异常,如出现将调用 error.JSP <!-- 定义异常处理器 --> <bean class="org.springframework. ...
- DRF基类APIView提供的Request、Response和序列化器的综合使用
关于DRF基类APIView提供的Request和Response对象的作用,可以看我的另一篇博文:https://www.cnblogs.com/chichung/p/9939864.html 综合 ...
- Selenium2+python自动化63-简易项目搭建【转载】
前言 到unittest这里基本上可以搭建一个简易的项目框架了,我们可以用一条run_main.py脚本去控制执行所有的用例,并生成报告,发送邮件一系列的动作 一.新建工程 1.打开pycharm左上 ...
- Laravel5.5 生成测试数据
1.在database/factories/UserFactory.php 中添加 2.在tinker中生成数据 3.数据生成成功
- PHP程序员的简单运维
所谓的简单运维就是保证自己开发的程序能正常运行和使用. 当一个程序员需要兼作运维时候需要掌握以下技能 1.linux系统基础命令和Windows Server操作 是基础中的基础,ls, rm, to ...
- C# base64获取图片后缀
由于业务需要,使用的微服务,然后做的上传文件操作. 但是有个问题就是,如果上传的是图片,之前为了图省事儿,直接写后缀jpg,但是人总是要进步的嘛,然后抽空就找了个. 首先微服务相关就不介绍了,直接从引 ...
- (21)python Anaconda
1.安装 Anaconda下载镜像 --官网下载太慢 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ 下载安装后 2.添加第三方源 管 ...
- Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现
二叉树 / Binary Tree 二叉树是树结构的一种,但二叉树的每一个节点都最多只能有两个子节点. Binary Tree: 00 |_____ | | 00 00 |__ |__ | | | | ...