awk ‘! a[$0]++’ 去重


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不執行【即不打印】

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM