深入理解 awk ‘! a[$0]++’ 去重

深入理解 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 ~]#
上一篇:springboot笔记08——整合swagger2


下一篇:原生js-----------addEventListener添加事件和直接添加事件区别