awk ‘! a[$0]++’ 怎么理解?
這是一個非常經典的去重復項的awk語句,雖然短小,不過涉及到了不少知識點,下面一一解讀:
<1> :”!” 即非。
<2>:a[$0],以$0為數據下標,建立數組a
<3>:a[$0]++,即給數組a賦值,a[$0]+=1
<4> :那么組合起來,awk是怎么執行!a[$0]++的呢?我用一個實際例子來解釋:
cat file 111 222 111 222 333 awk '{print a[$0],!a[$0]++,a[$0],!a[$0],$0}' file 1 1 0 111 1 1 0 222 1 0 2 0 111 1 0 2 0 222 1 1 0 333
但pattern為1即為真時,執行action,此時action為空執行print $0
由於執行了++,它的初值變成了0【執行++后數組被定義為int型,初始值就為0】
默認空char型變量未null,空int型變量為0
第一次肯定是不同的行,所有不會有重復
但遇到重復的行是,數組的下標相同,此時數組的value為0,執行++后,數組值為1,經取反后
數組為0,action不執行【即不打印】