awk基础-根据某字段去重

根据某字段去重

如下文件内容,去掉uid=xxx重复的行。

2019-01-13_12:00_index?uid=123
2019-01-13_13:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710
2019-01-14_12:00_index?uid=123
2019-01-14_13:00_index?uid=123
2019-01-15_14:00_index?uid=333
2019-01-16_15:00_index?uid=9710

awk命令:

awk -F"?" '!arr[$2]++{print}' a.txt

结果:

2019-01-13_12:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710

这里先将字段分隔符FS设置为?,使得$2就是要判断是否重复的字段。如果字段不重复,则arr[$2]++返回值是0,但返回后arr[$2]的值为1,如果字段重复再次出现,即重复,则arr[$2]++返回1,并arr[$2]的值为2。

所以,可通过!arr[$2]{print}来输出只第一次出现的行,即重复行全部删除。