linux:如何对文本里的相同行进行去重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux:如何对文本里的相同行进行去重相关的知识,希望对你有一定的参考价值。

1。对相同的行进行去重
2。对连续相同的行才进行去重各位高手回哪个都谢谢

使用 uniq 但记住不要排序就可以了追问

我查了一下,uniq确实可以对相邻的行进行去重,那么对全文中不管相邻与否,都可以去重又给怎么办

追答

全文中去重需要先使用sort命令对每行进行排序,排过序后就可以去除任意重复行了,因为排序后它们就成了相邻行。

追问

谢谢啦,那你再看看这个问题
http://zhidao.baidu.com/question/520480567?quesup2&oldq=1

参考技术A 使用uniq命令

他能显示或者去除重复行

linux命令(12)uniq去重

转载地址:http://blog.51yip.com/shell/1022.html

实例详细说明linux下去除重复行命令uniq

一,uniq干什么用的

文本中的重复行,基本上不是我们所要的,所以就要去除掉。linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个。使用uniq的时候要注意以下二点

1,对文本操作时,它一般会和sort命令进行组合使用,因为uniq 不会检查重复的行,除非它们是相邻的行。如果您想先对输入排序,使用sort -u。

2,对文本操作时,若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过

二,uniq参数说明

 1 [[email protected] ~]$ uniq --help
 2 用法:uniq [选项]... [文件]
 3 从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。
 4 
 5 不附加任何选项时匹配行将在首次出现处被合并。
 6 
 7 长选项必须使用的参数对于短选项时也是必需使用的。
 8  -c, --count              //在每行前加上表示相应行目出现次数的前缀编号
 9  -d, --repeated          //只输出重复的行
10  -D, --all-repeated      //只输出重复的行,不过有几行输出几行
11  -f, --skip-fields=N     //-f 忽略的段数,-f 1 忽略第一段
12  -i, --ignore-case       //不区分大小写
13  -s, --skip-chars=N      //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符
14  -u, --unique            //去除重复的后,全部显示出来,根mysql的distinct功能上有点像
15  -z, --zero-terminated   end lines with 0 byte, not newline
16  -w, --check-chars=N      //对每行第N 个字符以后的内容不作对照
17  --help              //显示此帮助信息并退出
18  --version              //显示版本信息并退出

三,测试文本文件uniqtest

 1     this is a test  
 2     this is a test  
 3     this is a test  
 4     i am tank  
 5     i love tank  
 6     i love tank  
 7     this is a test  
 8     whom have a try  
 9     WhoM have a try  
10     you  have a try  
11     i want to abroad  
12     those are good men  
13     we are good men 

四,实例详解

从例子中我们可以看出,uniq的一个特性,检查重复行的时候,只会检查相邻的行。重复数据,肯定有很多不是相邻在一起的。

 [[email protected] mytest]$ uniq -c uniqtest  
     3 this is a test  
     1 i am tank  
     2 i love tank  
     1 this is a test           //和第一行是重复的  
     1 whom have a try  
     1 WhoM have a try  
     1 you  have a try  
     1 i want to abroad  
     1 those are good men  
     1 we are good men  

这样就可以解决上个例子中提到的问题

    [[email protected] mytest]$ sort uniqtest |uniq -c  
     1 WhoM have a try  
     1 i am tank  
     2 i love tank  
     1 i want to abroad  
     4 this is a test  
     1 those are good men  
     1 we are good men  
     1 whom have a try  
     1 you  have a try  

uniq -d 只显示重复的行

[[email protected]ost mytest]$ uniq -d -c uniqtest  
 3 this is a test  
 2 i love tank 

uniq -D 只显示重复的行,并且把重复几行都显示出来。他不能和-c一起使用

[[email protected] mytest]$ uniq -D uniqtest  
this is a test  
this is a test  
this is a test  
i love tank  
i love tank 

在这里those只有一行,显示的却是重复了,这是因为,-f 1 忽略了第一列,检查重复从第二字段开始的。

[[email protected] mytest]$ uniq -f 1 -c uniqtest  
 3 this is a test  
 1 i am tank  
 2 i love tank  
 1 this is a test  
 2 whom have a try  
 1 you  have a try  
 1 i want to abroad  
 2 those are good men   //只有一行,显示二行

检查的时候,不区分大小写

[[email protected] mytest]$ uniq -i -c uniqtest  
 3 this is a test  
 1 i am tank  
 2 i love tank  
 1 this is a test  
 2 whom have a try  //一个大写,一个小写  
 1 you  have a try  
 1 i want to abroad  
 1 those are good men  
 1 we are good men

检查的时候,不考虑前4个字符,这样whom have a try 就和 you have a try 就一样了。

[[email protected] mytest]$ uniq -s 4 -c uniqtest  
3 this is a test  
1 i am tank  
2 i love tank  
1 this is a test  
3 whom have a try   //根上一个例子有什么不同  
1 i want to abroad  
1 those are good men  
1 we are good men 

 去重复的项,然后全部显示出来

    [[email protected] mytest]$ uniq -u uniqtest  
    i am tank  
    this is a test  
    whom have a try  
    WhoM have a try  
    you  have a try  
    i want to abroad  
    those are good men  
    we are good men  

对每行第2个字符以后的内容不作检查,所以i am tank 根 i love tank就一样了。

[[email protected] mytest]$ uniq -w 2 -c uniqtest  
 3 this is a test  
 3 i am tank  
 1 this is a test  
 1 whom have a try  
 1 WhoM have a try  
 1 you  have a try  
 1 i want to abroad  
 1 those are good men  
 1 we are good men 

以上是关于linux:如何对文本里的相同行进行去重的主要内容,如果未能解决你的问题,请参考以下文章

Linux 文本去重 之 命令sort 与

Linux高级命令

Linux高级命令

Linux高级命令

linux命令(12)uniq去重

Linux文本处理命令的Sort命令