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,如需转载请自行联系原作者