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

  • 相关阅读:
    努力学习吧!
    C# 捕捉键盘事件
    oracle 11g 及 plsqldeveloper 相关操作
    Oracle 建表空间
    窗体程序 防止重复打开子窗体
    asp 下 ewebeditor 上传图片功能,在IE7,IE8 及更高版本上失效解决方法
    StringBuilder 在后台动态输出 html 代码
    起动停止 Oracle11g 三个服务的批处理写法
    MySQL 常用命令语句
    虚拟机—pychrm
  • 原文地址:https://www.cnblogs.com/wenquanli/p/9717773.html
Copyright © 2011-2022 走看看