使用AWK将重复MAC地址替换为计数器值的问题排查
问题:AWK脚本替换重复MAC地址时出现重复行的问题
我尝试用AWK脚本将列表中重复的MAC地址替换为对应出现次数的12位计数器值,列表中存在重复MAC地址ba484ebce594。当前使用的AWK脚本如下:
awk '{ y[$1]++; print $0; if (y[$1] >= 2){printf("%012d", y[$1]-1); print "\t" $2 "\t" $3}}'
示例列表
ba484ebce594 1.107.86.38 null 641c67dc36da 1.107.86.39 as14Adrasna 84d47ec1e13a 1.107.86.40 asUBAViasua 5470d2af4cd8 1.107.86.42 asT12Maas2 5470d2af4f08 1.107.86.43 asTAceraslfScanner 641c67dc5e24 1.107.86.44 asTAceraslfAna 641c67dc3577 1.107.86.50 as15Halasa e840f2502778 1.107.86.60 as13BIBasB 5470d2af4d43 1.107.86.61 as18BIBasB 5470d2af4cc9 1.107.86.62 as19BIBasB 5470d2af506e 1.107.86.63 as110BIasAB 5470d2af4b59 1.107.86.64 as111BIasAB ba484ebce597 1.107.86.65 as1Funcasi e840f2502659 1.107.86.66 as1BAL ba484ebce594 1.107.86.68 as14Terasnal1
期望结果
ba484ebce594 1.107.86.38 null ... e840f2502659 1.107.86.66 as1BAL 000000000001 1.107.86.68 as14Terasnal1
实际结果
ba484ebce594 1.107.86.38 null ... e840f2502659 1.107.86.66 as1BAL ba484ebce594 1.107.86.68 as14Terasnal1 000000000001 1.107.86.68 as14Terasnal1
错误原因
你的脚本逻辑错误:先执行了print $0(无条件打印当前整行),之后判断如果是重复行(y[$1] >=2)再额外打印一行计数器内容,导致重复行既保留了原MAC行,又多了一行计数器行。
修正后的AWK脚本
核心逻辑是:根据MAC地址的出现次数,选择打印原MAC行还是计数器行,而不是先打印原行再追加。
awk '{ y[$1]++; if (y[$1] == 1) print $0; else printf("%012d\t%s\t%s\n", y[$1]-1, $2, $3) }'
逻辑说明
y[$1]++:先对当前MAC地址的计数加1- 当计数为1时(第一次出现),直接打印原行
- 当计数大于1时(重复出现),打印格式化的12位计数器(
y[$1]-1是因为第一次计数为1,重复的从000000000001开始),并拼接后面的IP和备注字段
验证结果
执行修正后的脚本后,重复的MAC地址行会被替换为计数器行,输出与期望一致:
ba484ebce594 1.107.86.38 null 641c67dc36da 1.107.86.39 as14Adrasna 84d47ec1e13a 1.107.86.40 asUBAViasua 5470d2af4cd8 1.107.86.42 asT12Maas2 5470d2af4f08 1.107.86.43 asTAceraslfScanner 641c67dc5e24 1.107.86.44 asTAceraslfAna 641c67dc3577 1.107.86.50 as15Halasa e840f2502778 1.107.86.60 as13BIBasB 5470d2af4d43 1.107.86.61 as18BIBasB 5470d2af4cc9 1.107.86.62 as19BIBasB 5470d2af506e 1.107.86.63 as110BIasAB 5470d2af4b59 1.107.86.64 as111BIasAB ba484ebce597 1.107.86.65 as1Funcasi e840f2502659 1.107.86.66 as1BAL 000000000001 1.107.86.68 as14Terasnal1
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

