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

  • 相关阅读:
    2021找工作总结
    HashMap源码(JDK1.8)-手动注释
    HashMap底层源码分析-手动注释
    面试常问的ArrayQueue底层实现
    SVN使用方法
    async await Task 使用方法
    视觉设备说明
    Java8--lambda表达式与函数式编程
    重磅!微软发布 vscode.dev,把 VS Code 带入浏览器!
    解决Vite-React项目中js使用jsx语法报错的问题
  • 原文地址:https://www.cnblogs.com/wenquanli/p/9717773.html
Copyright © 2011-2022 走看看