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,如需轉載請自行聯系原作者