zoukankan      html  css  js  c++  java
  • linux上文件内容去重的问题uniq/awk

    1、uniq:只会对相邻的行进行判断是否重复,不能全文本进行搜索是否重复,所以往往跟sort结合使用。

    例子1

    [root@aaa01 ~]# cat a.txt

    12

    34

    56

    12

    [root@aaa01 ~]# cat a.txt|uniq >>au.txt

    [root@aaa01 ~]# cat au.txt

    12

    34

    56

    12

    例子2:

    [root@aaa01 ~]# cat b.txt

    10

    46

    32

    10

    [root@aaa01 ~]# cat b.txt|sort |uniq >>bu.txt

    [root@aaa01 ~]# cat bu.txt

    10

    32

    46

    2、awk:可以全文本搜索去重然后进行显示

    例子1:

    如m.txt文本:

    [root@aaa01 ~]# cat m.txt

    12

    34

    56

    12

    [root@aaa01 ~]# awk '!x[$0]++' m.txt >ma1.txt

    [root@aaa01 ~]# cat ma1.txt

    12

    34

    56

    说明:获取第一行x[12],因为这是第一行,数组m里从没见过12这个变量,那么自然他的值就是假(0)也就是说x[12]=0,这个时候!就有大作用了,他把x[12]假(0)变成了x[12]为真(!0)这个时候原本不改打印的第一行就变成了应该打印了,取逻辑反后对x[12]的值+1然后处理第二行

    第二行x[34]这个情况跟刚才第一行的x[12]一样的情况,也应该打印他。

    第三行x[56]和第一、二两行一样的处理逻辑。

    到第四行的时候情况遍了,因为第一行已经出现过了x[12]并且已经++过了他的值已经是非0而不是前两行的0了,本应打印但这时候再由!取逻辑反就不必打印了

    所以执行完就是这个结果。

    例子2:

    [root@aaa01 ~]# awk 'x[$0]++' m.txt >ma2.txt

    [root@aaa01 ~]# cat ma2.txt

    12

    例子3:

    [root@aaa01 ~]# vi n.txt

    78

    12

    01

    01

    78

    [root@aaa01 ~]# awk 'x[$0]++' n.txt >na.txt

    [root@aaa01 ~]# cat na.txt

    01

    78

  • 相关阅读:
    Build 2019 彩蛋
    崂山
    Win10 iot 修改日期时间
    《 结网:改变世界的互联网产品经理 》
    <[你在荒废时间的时候别人都在拼命!]>
    《时间的玫瑰》阅读笔记
    翻石头价值投资手册-科技行业
    No module named flask.ext.sqlalchemy.SQLALchemy
    《寻找伟大的企业》
    <《基金经理投资笔记丛书4-1:投资是一种生活方式》>
  • 原文地址:https://www.cnblogs.com/wenquanli/p/9717773.html
Copyright © 2011-2022 走看看