1. awk ‘! a[$0]++’ 怎么理解?
这是一个非常经典的去重复项的awk语句,虽然短小,不过涉及到了不少知识点,下面一一解读:
<1> :”!” 即非。
<2>:a[$0],以$0为数据下标,建立数组a
<3>:a[$0]++,即给数组a赋值,a[$0]+=1
<4> :那么组合起来,awk是怎么执行!a[$0]++的呢?
即: '!a[$0]++' 当$0的内容首次出现时,a[$0]将为空(相当于0),
此时将先求!a[$0]的值(也是整个式子的值,即为非空 true ,将影响后续动作,执行默认的print)
然后对a[$0]进行+1,a[$0] 加1后为1,当下次出现时a[$0]即不为空,表达式结果为非真 false,即不打印
例如:
1.除出第二列重复的:
awk -F ',' '! a[$2]++' test.txt
2.除出行重复的:
awk -F ',' '! a[$0]++' test.txt
如有疑问,欢迎留言交流。