Chinaunix首页 | 论坛 | 博客
  • 博客访问: 969900
  • 博文数量: 99
  • 博客积分: 3306
  • 博客等级: 中校
  • 技术积分: 1238
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-21 10:14
文章分类

全部博文(99)

文章存档

2012年(37)

2011年(56)

2010年(6)

分类: LINUX

2012-02-17 11:18:54

需要对比文件A和文件B。一般这个时候可以直接使用comm +sort+uniq来完成。

comm  命令详解:

功能说明:比较两个已排序的文件

 

语法: comm [-123][--help][--version][第一个文件][第二个文件]

补充说明:这项指令会一列列的比较两个已排序文件的差异,并将其结果显示出来。如果没有指定任何参数,则会把结果分成3行显示,第1行是仅在第一个文件中出现的列,第2行是仅在第二个文件中出现过的列,第3行则是在两个文件中都出现过的列。若给予的文件名称是"-",则comm指令会从标准输入设备中读取数据。

参数

-1 不显示在第1个文件中出现的列

-2 不显示在第2个文件中出现的列

-3 不显示只在第1或第2个文件中出现的列

选项1 2和3抑制相应的列显示,例如

comm -12 显示两个文件中都出现的行

comm -23 显示在第1个文件出现,而不是在第2个文件出现的行

comm -123 什么都不显示

注意

uniq    comm 命令需要使用已经排序好的内容才有意义。

比如


1.显示只在文件A出现的行

comm  -23 <(sort A|uniq) <(sort B|uniq)
2.显示只出现的文件B的行
comm  -13 <(sort A|uniq) <(sort B|uniq)
3.显示AB都有的行
comm  -12 <(sort A|uniq) <(sort B|uniq

其实也可以直接使用cat uniq来完成的。
显示只在B出现的行
sort A|uniq > a && cat a a >A && sort B|uniq >>A && sort  A |uniq -u
显示只出现的A的行 
sort B|uniq > b && cat b b >B && sort A|uniq >>B && sort B |uniq -u
显示AB都有的行

sort A|uniq >a && sort B|uniq >>a && sort a |uniq -d




阅读(2130) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~