每日Linux学习:超N的文本对比工具comm

boyanx1个月前技术教程4

comm 命令用于逐行比较两个已排序的文件,非常类似sql的join语句。使用前必须提前排序文件(可用 sort 命令),否则结果不可靠。结合3个参数的使用,会有一些非常实用的用法,本文将用大量的实例详细讲解。


一、示例文件准备

先创建两个已排序的文件:

# 文件1: fruits1.txt
apple
banana
grape
orange

# 文件2: fruits2.txt
banana
cherry
grape
kiwi


二、实例讲解

1、基础用法

comm fruits1.txt fruits2.txt

其默认输出三列(以制表符分隔):

第一列:仅 文件1 存在的行

第二列:仅 文件2 存在的行

第三列:两个文件共有的行

输出:

apple
banana
cherry
grape
kiwi
orange

第一列(无缩进):仅 fruits1.txt 有的行。输出:apple, orange

第二列(一个制表符缩进):仅 fruits2.txt 。输出:cherry, kiwi

第三列(两个制表符缩进):共有的行。输出:banana, grape


2、仅显示共有的行(隐藏第1、2列)

comm -12 fruits1.txt fruits2.txt

输出:

banana
grape

-1:隐藏第一列(仅文件1)

-2:隐藏第二列(仅文件2)

comm -12就是保留第三列(共有行),显示fruits1.txt与fruits2.txt的交集。


3、仅显示文件1独有的行

comm -23 fruits1.txt fruits2.txt

输出:

apple
orange

-2:隐藏第二列(仅文件2)

-3:隐藏第三列(共有)

comm -23就是保留第一列(文件1)中不同于第二列的信息。显示fruits1.txt中不同于fruits2.txt的信息。


4、仅显示文件2独有的行

comm -13 fruits1.txt fruits2.txt

输出:

cherry
kiwi

-1:隐藏第一列(仅文件1)

-3:隐藏第三列(共有)

comm -13保留第二列(仅文件2)中不同于第一列的信息。


5、处理未排序文件

先排序再比较(使用进程替换):

comm <(sort unsorted1.txt) <(sort unsorted2.txt)


注意事项

1、文件必须已排序,若未排序,请预先使用 sort file.txt > sorted_file.txt 预处理。

2、强制不检查排序(不推荐):--nocheck-order。

3、重复行的处理:

4、同一文件中的重复行会被视为不同行。例如:

# 文件1: aa.txt
apple
apple

# 文件2: bb.txt
apple

comm aa.txt bb.txt

输出:

apple
apple

第一个 apple 是共有行(第三列)。

第二个 apple 是文件1独有的行(第一列)。

所以推荐sort排序时加上-u参数,去掉重复行


最后给一个实践中的常用的实例:

在系统安全审计中经常会核查/etc/passwd文件,查看账号的异动,我们可以在生产系统上线后,将/etc/passwd文件做个备份,将这个备份文件作为基准文件,后面核查账号时通过comm对比passwd文件与基准文件差异,这样就轻松的完成核查。

假设基准(备份)文件名称:bak_passwd

#先将备份文件、passwd排序:
sort -u bak_passwd > base.txt
sort -u /etc/passwd > check.txt
#comm -23比较:
comm -23 check.txt base.txt

相关文章

Double Commander:双窗口文件管理神器,工作效率倍增!

我相信很多人在使用Windows资源管理器的低效而烦恼。每天需要处理大量文件却没有趁手的工具。今天向大家推荐一款免费、开源、跨平台的文件管理神器——Double Commander!它的优点,大家在使...

谈谈目前最好用的文件搜索神器

Everything 是由 voidtools 开发的免费、轻量级、超高速的 Windows 本地文件搜索工具。它通过直接读取 NTFS 文件系统的 USN 日志(而非扫描硬盘),实现秒级检索全盘文件...

不愁了!开源智能体Paper2Poster「一键生成」学术海报

做海报有多痛苦?大家做学术应该都懂那种感觉:临近 DDL 前熬夜赶制海报,得把上万字的论文浓缩进一页 PPT,还要图文并茂兼顾美观。一不小心排版崩了、字体太小或者信息太多,导师改起来也是花样百出,直呼...

更智能、更快速、更安心 银河麒麟桌面操作系统文件管理器最新体验

文件管理器是用户浏览、管理文件的重要工具。文件管理器的操作体验直接影响用户对操作系统的整体感受。银河麒麟桌面操作系统V10 SP1 2503针对文件管理器进行了深度优化,从搜索效率、批量操作、数据安全...

在线协作白板是什么,哪个好用?5个主流的白板工具盘点推荐!

相信每个职场人都有这么一种经历,临时想把一个文件分享给同事,费尽千辛万苦,却发现死活找不到,办公俨然成了“不是在找文件,就是在找文件的路上”,这样的办公体验别提有多差了:不止要处理糟心事,还不得不忍受...

Jan AI,一款注重隐私保护非网页版跨平台的AI工具

如果你对AI有隐私保护的需求,又不喜欢网页版的ChatGPT,Jan这款AI应用正适合你。Jan 是一个可在个人的设备上100%离线运行的 ChatGPT 替代品。我其目标是让普通人能够轻松下载和运行...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。