在awk中,可以用!a[$0]++做为条件,对重复出现的行进行处理。
bash-3.2$ cat 2
abc
abc
ef
123
dgag
123
xxx
bash-3.2$ awk '!a[$0]++' 2
abc
ef
123
dgag
xxx
省略action时,默认action是{print},如awk '1'就是awk '1{print}'
对于awk '!a[$3]++',需要了解3个知识点
1、awk数组知识,不说了
2、awk的基本命令格式 awk 'pattern{action}'
3、var++的形式:先读取var变量值,再对var值+1
以数据
1 2 3
1 2 3
1 2 4
1 2 5
为例,对于awk '!a[$3]++'
awk处理第一行时: 先读取a[$3]值再自增,a[$3]即a[3]值为空(0),即为awk '!0',即为awk'1',即为awk '1{print}'
awk处理第二行时: 先读取a[$3]值再自增,a[$3]即a[3]值为1,即为awk '!1',即为awk'0',即为awk '0{print}'
.............
最后实现的效果就是对于$3是第一次出现的行进行打印,也就是去除$3重复的行