zoukankan      html  css  js  c++  java
  • awk ‘! a[$0]++’ 去重

    awk ‘! a[$0]++’ 怎么理解?

    这是一个非常经典的去重复项的awk语句,虽然短小,不过涉及到了不少知识点,下面一一解读:

    <1> :”!” 即非。

    <2>:a[$0],以$0为数据下标,建立数组a

    <3>:a[$0]++,即给数组a赋值,a[$0]+=1

    <4> :那么组合起来,awk是怎么执行!a[$0]++的呢?我用一个实际例子来解释:

    cat file
    111
    222
    111
    222
    333
    
    awk '{print a[$0],!a[$0]++,a[$0],!a[$0],$0}' file
      1 1 0 111
      1 1 0 222
    1 0 2 0 111
    1 0 2 0 222
      1 1 0 333
    

      但pattern为1即为真时,执行action,此时action为空执行print $0

      由于执行了++,它的初值变成了0【执行++后数组被定义为int型,初始值就为0】

    默认空char型变量未null,空int型变量为0

      第一次肯定是不同的行,所有不会有重复

      但遇到重复的行是,数组的下标相同,此时数组的value为0,执行++后,数组值为1,经取反后

      数组为0,action不执行【即不打印】

      

  • 相关阅读:
    盘点杂谈(二)
    物料中库存的管理(一)
    物料中的库存管理(二)
    MM中的MRP(一)
    (转)成功ERP需实施顾问和项目经理亲密协作
    好久不来.
    MM中的MRP(三)
    MM中的MRP(二)
    深度学习浅层理解(一)
    处理流小结
  • 原文地址:https://www.cnblogs.com/irockcode/p/7044646.html
Copyright © 2011-2022 走看看