Linux之awk中 !a[$0]++ 与 !a[$1…]++ [转载自苦海无边博客]

摘要

理i解 !a[$0]++ 与 !a[$1]++作用及二者区别,要了解以下两点:1.a[$0]是未定义的,即undef;2.!优先级高于++。

 

理i解 !a[$0]++ 与 !a[$1]++作用及二者区别,要了解以下两点:

  • a[$0]是未定义的,即undef
  • !优先级高于++

基于以上两点,有如下例子:

Linux之awk中 !a[<img src=]++ 与 !a[ ...]++ [转载自苦海无边博客]" alt="2868792962652662006" width="448" height="91" class="alignnone size-full wp-image-2768" />
 

1:!a[$0]++

!a[$0]++可以去除一行中重复的记录,以记录作为数组(可以将a理解为数组)索引;基于上面两点说明,这个不难理解。例子如下

Linux之awk中 !a[<img src=]++ 与 !a[ ...]++ [转载自苦海无边博客]" alt="649362771289050004" width="453" height="182" class="alignnone size-full wp-image-2765" />
从上面例子可以看出,重复的记录被删除掉,只保留重复记录中第一次出现的记录

 

2:!a[$1]++ 或者 !a[$2]++等等

!a[$1]++可以根据记录中某个域删除这个域相同的记录,也可以根据这个域相同,执行另外一些相应的操作。例子如下;

Linux之awk中 !a[<img src=]++ 与 !a[ ...]++ [转载自苦海无边博客]" alt="977281119156469150" width="436" height="134" class="alignnone size-full wp-image-2766" />
从上面例子可以看出,第二个域相同的多条记录被删除,只保留重复记录中第一次出现的记录

 

例子:

1.文件中有多条重复的记录,只显示重复记录中的一条

Linux之awk中 !a[<img src=]++ 与 !a[ ...]++ [转载自苦海无边博客]" alt="2834171540517331086" width="389" height="121" class="alignnone size-full wp-image-2769" />
 

2.统计(按记录统计)文件中每条记录出现的次数

Linux之awk中 !a[<img src=]++ 与 !a[ ...]++ [转载自苦海无边博客]" alt="1168684103320298760" width="500" height="123" class="alignnone size-full wp-image-2770" />
如上图所示,按照记录统计文件中每条记录出现的次数

 

3.统计(按域统计)文件中某个域出现的次数,有时候可能根据日志中的IP地址来统计某个IP访问网站的次数

Linux之awk中 !a[<img src=]++ 与 !a[ ...]++ [转载自苦海无边博客]" alt="2395915001778831717" width="500" height="108" class="alignnone size-full wp-image-2767" />

lookback
  • 本文由 发表于 2015年9月17日02:09:37
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: