注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

wangyufeng的博客

祝愿BB 健康开心快乐每一天

 
 
 

日志

 
 

Linux学习:用uniq来处理文件重复数据--交集,差集,计数等(转)  

2011-04-02 22:17:29|  分类: Linux学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
经常有这样的需求:两个文本文件要求取重复的行或只取不重复的,简单的情况下用sort和uniq来处理是非常方便的: 
利用现存两个文件,生成一个新的文件 

1. 取出两个文件的并集(重复的行只保留一份) 

2. 取出两个文件的交集(只留下同时存在于两个文件中的文件) 

3. 删除交集,留下其他的行 

1. cat file1 file2 | sort | uniq 
2. cat file1 file2 | sort | uniq -d 
3. cat file1 file2 | sort | uniq -u 

当然如果需要计数也有一个很好的参数uniq -c 可以将相同行数的计数放在行首 


不过如果要求复杂,这个方法就不好用了,之后我会和大家分享一个按列比较的脚本。 
------ 
另外,顺便将这sort和uniq的详细帮助附到这里供参考(linux常见的命令其实有很强大,只是可能不留心而没有发现): 

sort [选项] 文件 

说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。 

sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。 

改变缺省设置的选项主要有: 

- m 若给定文件已排好序,合并文件。 

- c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。 

- u 对排序后认为相同的行只留其中一行。 

- o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。 

改变缺省排序规则的选项主要有: 

- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。 

- f 将小写字母与大写字母同等对待。 

- I 忽略非打印字符。 

- M 作为月份比较:“JAN”<“FEB” 

- r 按逆序输出排序结果。 

  -k, --key=POS1[,POS2] posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。 

- b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。 

- t separator 指定字符separator作为字段分隔符。 



uniq命令 

文件经过处理后在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的唯一样本。 

语法: 

uniq [选项] 文件 

说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。 

该命令各选项含义如下: 

- c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。 

- d 只显示重复行。 

- u 只显示文件中不重复的各行。 

- n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。 

+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。 

- f n 与- n相同,这里n是字段数。 

- s n 与+n相同,这里n是字符数。
本文转自:http://hi.baidu.com/insidi/blog/item/14b8d623b38a545a935807bb.html
  评论这张
 
阅读(2644)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017