天天看点

awk 金典去除原理解析

awk '!a$[$0]++' file 可以实现对file文件去除重复行,我的file文件内容为:

aaa

bbb

ccc

ddd

awk '!a[$0]++' file去重后:

要理解这个去重原理首先得明白以下几个知识点:

    1、a++与++a的区别: a++是先引用,再赋值,而++a则是先赋值,再引用。

    2、awk 的工作模式: awk 'pattern{action}' file 在awk中pattern=0为假,不执行{action} pattern 非0 为真,执行{action}

    3、在awk中,对于未初始化的数组变量,在进行数值运算的时候,会赋予初值0,因此a[$0]=0,++运算符的特性是先取值,后加1,因此Pattern等价于!0而0为假,!为取反,因此整个Pattern最后的结果为1,当awk再次读取到aaa的时候,a$[0]就是会1,取反后!1为假,pattern为假{action}则不执行。

    配图说明:

<a href="http://s3.51cto.com/wyfs02/M01/8A/00/wKiom1gjVGWyfektAAANNV0IJys493.png" target="_blank"></a>

    实例演示:

    去重后:

本文转自 wangergui 51CTO博客,原文链接:http://blog.51cto.com/wangergui/1871302,如需转载请自行联系原作者