记录去重
背景说明
05091D2A0000
3BC30ECC0000
B9CC86880000
0661688C0000
00E0621101AC
3BC30ECC0000
003018AA322A
有上述这样一个包含了设备id信息的列表文件 devices.txt,但其中有同个设备id多次出现的情况,现在要求去除这些重复出现的设备行,得到一个只包含唯一设备id信息的列表文件。
问题分析
这是很典型的去重应用,借助于awk数组下标可以为字符串的特性,在不考虑机器内存占用的情况下只需要简单几步:
- 按行遍历设备列表文件;
- 将每行的第1个域的值作为数组下标进行保存;
- 遍历数组下标,进行输出保存。
解决方案
BEGIN{ } { ++ids[$1]; } END{ for ( key in ids ) { print(key) > "/tmp/test/uniq.txt" } }
$awk -f case_1-1.awk case_1-1.data
代码很简单,如果说需求改成获取其中重复出现次数超过10次的设备列表,只需要在输出行前加上判断条件if(ids[key]>10){...}
即可。