Welcome 微信登录

首页 / 操作系统 / Linux / Linux排重的方法

想必各位用linux的人都会碰到排重的问题,像查看一个日志文件,碰到很多重复记录,看起来很痛苦。还有像grep一下关键字,想找出现关键字的文件,但是出现了一堆重复的文件名,也是一件郁闷的事情。 下面给大家介绍两种linux排重的方法,一种是使用uniq命令,一种使用gawk。uniq排重uniq的作用是对相邻重复行进行排重处理,对无序的字符是没办法处理,所以需要配合sort一起使用。下面举个例子,test.txt 的具体内容如下:www.linuxidc.com @linux:~/tmp$ cat test.txt
aa
bb
aa
cc
bb排重可以通过命令:www.linuxidc.com @linux:~/tmp$ cat test.txt  | sort | uniq
aa
bb
cc如果需要获取每条重复记录的出现的次数,可以使用-c选项:www.linuxidc.com @linux:~/tmp$ cat test.txt  | sort | uniq -c
      2 aa
      2 bb
      1 ccgawk排重:使用gawk排重的话,原理是用一个数组的索引来存储每行记录,数组的值可以存放出现次数。www.linuxidc.com @linux:~/tmp$ cat test.txt  | gawk "{a[$1]++}; END {for (b in a) print a[b], b}"
2 bb
1 cc
2 aa{a[$1]++}; 这一行的作用是使用一个a数组,他的索引是记录的第一列,就是这里的aa、bb、cc。“{}”号前面没有作用域,对每条记录都生效。END {for (b in a) print a[b], b} 这一行是在遍历后记录后,遍历数组a,打印结果。uniq跟gawk都能用来进行排重处理,uniq使用起来应该比较方便,记住uniq跟sort命令就行。但是就效率来说uniq的效率比gawk差多了,因为使用uniq之前要进行排序,最好的情况是n*log(n)复杂度,而使gawk只需要遍历一遍,也就是n的复杂度。所以这里跟大家建议,对于小文件,可以使用sort + uniq进行排重处理,但是对于大文件,使用gawk会给你节省不少时间。Linux基础教程:磁盘分区(理论篇)Linux局域网探测相关资讯      Linux基础教程 
  • Linux基础教程:对文件打包压缩  (03月08日)
  • 基础教程:Linux 新手应该知道的   (09/06/2015 21:17:20)
  • Linux基础教程:find 与 xargs  (04/05/2015 10:20:11)
  • Linux基础教程:tar 命令使用介绍  (12/03/2015 13:19:47)
  • Linux基础教程(1)操作系统基础   (08/15/2015 20:44:01)
  • Linux基础教程:从源码安装软件  (04/05/2015 10:14:45)
本文评论 查看全部评论 (0)
表情: 姓名: 字数