shell学习(22)- comm
1.预备知识
comm命令可用于比较两个已排序的文件。它可以显示出第一个文件和第二个文件所独有的行以及这两个文件所共有的行。该命令有一些选项可以禁止显示指定的列,以便于执行交集和求差操作。
- 交集(intersection):打印出两个文件所共有的行。
- 求差(difference):打印出指定文件中所包含的互不相同的那些行。
- 差集(set difference)①:打印出包含在文件A中,但不包含在其他指定文件(例如B和C)中的那些行。
2. 实战演练
需要注意的是comm必须使用两个排过序的文件作为输入。下面是我们用到的输入文件:
$ cat A.txt
apple
orange
gold
silver
steel
iron $ cat B.txt
orange
gold
cookies
carrot
$ 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
steel
输出的第一列包含只在A.txt中出现的行,第二列包含只在B.txt中出现的行,第三列包含A.txt和B.txt中共有的行。各列之间以制表符(\t)作为分隔符。
(2) 为了打印两个文件的交集,我们需要删除前两列,只打印出第三列。-1选项可以删除第一列,-2选项可以删除第二列,最后留下的就是第三列:
$ comm A.txt B.txt - -
gold
orange
(3) 删除第三列,就可以打印出两个文件中互不相同的那些行:
$ comm A.txt B.txt -
apple
carrot
cookies
iron
silver
steel
输出中包含着夹杂有空白的两列,显示了在file1和file2中存在的唯一的行。要想提高输出结果的可用性,可以将两列合并成一列,就像这样:
apple
carrot
cookies
iron
silver
steel
(4) 可以使用tr删除制表符来合并两列:
$ comm A.txt B.txt - | tr -d '\t'
apple
carrot
cookies
iron
silver
steel
(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 删除第一列和第三列。
3. 工作原理
comm的命令行选项可以减少输出。
- -1:删除第一列。
- -2:删除第二列。
- -3:删除第三列。
差集操作允许你比较两个文件,去掉两个文件中共有的行,打印出只在A.txt或B.txt中出现的那些行。当A.txt和B.txt作为comm命令的参数时,输出中的第一列是A.txt相对于B.txt的差集,第二列是B.txt相对于A.txt的差集。
comm命令还接受字符-作为命令行参数,借此实现从stdin中读取输入。这就提供了一种比较多个文件的方法。
假设我们有一个文件C.txt:
$> cat C.txt
pear
orange
silver
mithral
我们可以将文件B.txt和C.txt与A.txt相比较:
$> sort B.txt C.txt | comm - A.txt
apple
carrot
cookies
gold
iron
mithral
orange
pear
silver
steel
shell学习(22)- comm的更多相关文章
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- Shell 学习(二)
目录 Shell 学习(二) 1 设置环境变量 1.1 基本语法 1.2 实践 2 位置参数变量 2.1 介绍 2.2 基本语法 2.3 位置参数变量应用实例 3 预定义变量 3.1 基本介绍 3.2 ...
- shell学习记录002-知识点储备
1.echo "4*0.33" |bc #计算机功能的运用 [root@oc3408554812 shell]# ss=22; [root@oc3408554812 shel ...
- shell学习总结之自定义函数
shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- shell学习指南-阅读笔记
shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...
- 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等
1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...
- Shell学习之结合正则表达式与通配符的使用(五)
Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...
- Shell学习之条件测试(四)
Shell学习之条件测试 目录 逻辑测试 文件测试 数值比较 字符串比较 逻辑测试 格式: [ 表达式 ] 操作符 [ 表达式2 ] …… 命令1 操作符 命令2 …… 常用的操作符 ( 注意:-a和 ...
随机推荐
- LA3905 Meteor
https://vjudge.net/problem/UVALive-3905 计算出每个点在相框中的时间段,扫描线做即可 关键在如何快速计算每个点在相框中的时间段.对每个点进行运动分解,进入的时间L ...
- BZOJ1491:1491: [NOI2007]社交网络
1491: [NOI2007]社交网络 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2204 Solved: 1175[Submit][Status ...
- 点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决?
点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决? window.open("page1.html","win1"); 这句 ...
- []==![] 为什么等于true?
最近碰到这样一个问题: []==![] 为什么等于true? 首先分析 !的优先级较==高,先运算==两侧的操作数: typeof []; //"object" typeof ...
- webstorm之Monokai-Sublime主题颜色设置方法及激活注册码
打开https://github.com/OtaK/jetbrains-monokai-sublime 链接,然后点击右边的下载ZIP文件即可.解压之后,会得到一个Monokai-Sublime.ja ...
- netbeans7.4 在项目内查找 快捷键 ctrl shift f
- c#的DateTime的各种字符串格式
今天看到工程里有关DateTime的有关知识,之前了解一些用法,比如怎么获取年月日,当前系统时间等等,但是,感觉还是有好多不知道,于是上网搜罗了一下,找到很多有关知识,现在与大家分享下: Da ...
- Docker Nginx部署
1.下载nginx镜像 docker pull nginx 2.创建nginx配置文件 vim /etc/nginx/nginx.conf user nginx; worker_processes 1 ...
- 将自己的代码托管到github - 秦时明月 - CSDN博客
步骤: 1.建立自己的github 2.安装github客户端,并配置身份 3.建立github项目 4.将github项目库下载到本地 5.提交本地代码到github 详细操作: 1.github网 ...
- 高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用
在消息队列中,当消费者去消费消息的时候,无论是通过 pull 的方式还是 push 的方式,都可能会出现大批量的消息突刺.如果此时要处理所有消息,很可能会导致系统负载过高,影响稳定性.但其实可能后面几 ...