深入理解 awk ‘! a[$0]++’ 去重
近期和同事回顾一下shell脚本,awk ‘! a[$0]++’ 去重复不太好理解?我整理了一下希望能帮助大家理解;
- ”!” 即非;
- a[$0],以$0为数据下标,建立数组a
- a[$0]++,即给数组a赋值,a[$0]+=1,注意a++和++a的区别,a++是先输出值后加1
- awk当pattern为1即为真时,执行action,此时action为空执行print $0
- 在shell中没有赋值的变量默认是char类型是空值,后面有++后数组被定义为int型,初始值就为0
[root@VM_39_7_centos ~]# a=0
[root@VM_39_7_centos ~]# echo "$a"
0
[root@VM_39_7_centos ~]# echo $((a++))
0
[root@VM_39_7_centos ~]# echo $a
1
[root@VM_39_7_centos ~]# awk '{print a[$0],!a[$0]++,a[$0],!a[$0],$0}' file
1 1 0 111
1 1 0 222
1 1 0 555
1 1 0 333
1 0 2 0 111
1 0 2 0 222
1 1 0 444
2 0 3 0 222
1 0 2 0 555
[root@VM_39_7_centos ~]# more file
111
222
555
333
111
222
444
222
555
[root@VM_39_7_centos ~]#