天天看點

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