转载地址:https://m.baidu.com/from=844b/bd_page_type=1/ssid=0/uid=0/pu=usm%400%2Csz%401321_2001%2Cta%40utouch_1_8.1_3_600/baiduid=7158631D9CE591C840AF47EAC0FB86F6/w=0_10_Awk+%E5%8E%BB%E9%87%8D%E8%AF%A6%E8%A7%A3/t=wap/l=3/tc?ref=www_utouch&lid=5474024596868729692&order=8&vit=osres&tj=www_normal_8_0_10_title&m=8&srd=1&dict=32&title=awk%E4%BD%BF%E7%94%A8%E6%A1%88%E4%BE%8B%3A%E9%80%9A%E8%BF%87awk%E5%8E%BB%E9%99%A4%E9%87%8D%E5%A4%8D%E8%A1%8CCodingAnts&sec=7686&di=95c1c4843b082c2d&bdenc=1&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_yJVBiu-o5_kgeSlItdnJ7HNRHSGGkLagTCcsx5EwnSf07Uz7qQ3bfdtgix96juwuK3utgjKW2RFtdA-4tO4VCkm64u5l3t8uK



awk使用案例:通过awk去除重复行


  重复的数据总是让人各种不爽,占用空间、看起来费劲等等,今天就介绍一个通过awk去除文件中重复数据的办法,awk默认是一行行来处理数据的,那我们就重点说说如何通过awk去除文件中的重复行。

  首先准备一个文本文件,随便写个文件,包含重复行数据的即可,或者你可以参考我这里的文件:

CodingAnts@ubuntu:~/awk$ cat dup
hello world
awk
coding ants
hello world
awk
hello world
awk
coding ants
coding ants

  共有9行,后面6行都是重复的前面的几行,最终的效果应该是只显示上面重点显示的那几行,先来看看效果:

CodingAnts@ubuntu:~/awk$ awk '!a[$0]++' dup
hello world
awk
coding ants

  在《awk程序指令模型》中介绍了awk的程序指令由模式和操作组成,即Pattern { Action }的形式,如果省略Action,则默认执行 print $0 的操作。

  实现去除重复功能的就是这里的Pattern:

!a[$0]++

  在awk中,对于未初始化的数组变量,在进行数值运算的时候,会赋予初值0,因此a[$0]=0,++运算符的特性是先取值,后加1,因此Pattern等价于

!0

  而0为假,!为取反,因此整个Pattern最后的结果为1,相当于if(1),Pattern匹配成功,输出当前记录,对于dup文件,前3条记录的处理方式都是如此。

  当读取第4行数据“hello world”的时候,a[$0]=1,取反后的结果为0,即Pattern为0,Pattern匹配失败,因此不输出这条记录,后续的数据以此类推,最终成功实现去除文件中的重复行。


Logo

更多推荐