|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 806|回復: 3
打印 上一主題 下一主題

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

[複製鏈接]

989

主題

1

好友

5296

積分

教授

Rank: 8Rank: 8

  • TA的每日心情

    2024-11-3 15:50
  • 簽到天數: 1258 天

    [LV.10]以壇為家III

    推廣值
    2
    貢獻值
    378
    金錢
    1528
    威望
    5296
    主題
    989

    回文勇士 文明人 中學生 高中生 簽到勳章 簽到達人 男生勳章 大學生 文章勇士 附件高人 附件達人 文章達人 教授

    樓主
    發表於 2012-9-14 19:01:41
      一,uniq干什么用的

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

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

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

        二,uniq参数说明

        [zhangy@blackghost ~]$ uniq --help

        用法:uniq [选项]… [文件]

        从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。

        不附加任何选项时匹配行将在首次出现处被合并。

        长选项必须使用的参数对于短选项时也是必需使用的。

        -c, --count              //在每行前加上表示相应行目出现次数的前缀编号

        -d, --repeated          //只输出重复的行

        -D, --all-repeated      //只输出重复的行,不过有几行输出几行

        -f, --skip-fields=N     //-f 忽略的段数,-f 1 忽略第一段

        -i, --ignore-case       //不区分大小写

        -s, --skip-chars=N      //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符

        -u, --unique            //去除重复的后,全部显示出来,根mysql的distinct功能上有点像

        -z, --zero-terminated   end lines with 0 byte, not newline

        -w, --check-chars=N      //对每行第N 个字符以后的内容不作对照

        --help              //显示此帮助信息并退出

        --version              //显示版本信息并退出

        其中-z不知道有什么用

        三,测试文本文件uniqtest

        this is a test

        this is a test

        this is a test

        i am tank

        i love tank

        i love 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

        四,实例详解

        [zhangy@BlackGhost 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

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

        [zhangy@BlackGhost 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

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

        [zhangy@BlackGhost mytest]$ uniq -d -c uniqtest

        3 this is a test

        2 i love tank

        uniq -d 只显示重复的行

        [zhangy@BlackGhost mytest]$ uniq -D uniqtest

        this is a test

        this is a test

        this is a test

        i love tank

        i love tank

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

        [zhangy@BlackGhost 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   //只有一行,显示二行

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

        [zhangy@BlackGhost 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

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

        [zhangy@BlackGhost 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

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

        [zhangy@BlackGhost 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

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

        [zhangy@BlackGhost 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

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

    7

    主題

    0

    好友

    3567

    積分

    大學生

    Rank: 6Rank: 6

  • TA的每日心情

    2020-2-2 12:20
  • 簽到天數: 503 天

    [LV.9]以壇為家II

    推廣值
    0
    貢獻值
    0
    金錢
    51
    威望
    3567
    主題
    7
    沙發
    發表於 2013-3-25 14:23:57
    小弟新手学习饿

    0

    主題

    0

    好友

    171

    積分

    小學生

    Rank: 2

    該用戶從未簽到

    推廣值
    0
    貢獻值
    0
    金錢
    1737
    威望
    171
    主題
    0
    板凳
    發表於 2013-3-30 20:51:09
    新手学习饿

    7

    主題

    1

    好友

    777

    積分

    高中生

    Joker

    Rank: 4

  • TA的每日心情
    慵懶
    2024-10-7 17:02
  • 簽到天數: 549 天

    [LV.9]以壇為家II

    推廣值
    0
    貢獻值
    21
    金錢
    611
    威望
    777
    主題
    7

    回文勇士 文明人 簽到勳章 中學生 簽到達人

    地板
    發表於 2013-4-1 13:50:53
    請善用帖子右下角舉報鍵,來檢舉有害網站/垃圾/宣傳帖,每個舉報會有金錢增加。
    啊哈哈哈啊资源好东西
    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-11-16 14:20 , Processed in 0.012962 second(s), 16 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部