我想出了以下代码来查找passwd文件中的重复UID,但它没有包含第一个实例(稍后重复的那个),我最终想要一个带{{1}的字典但我不知道如何在Awk中完成它。
到目前为止我所拥有的:
UID = [ USER1, USER2 ]
解释(据我所知),如果正则表达式匹配不以注释'#'开头的行,则根据当前行UID值递增数组,使该行变为非零/真值从而打印出来。
答案 0 :(得分:1)
这可以帮助你做到这一点。首先我们在数组中保存数据,在END {}块中我们打印数组中的所有重复行(在执行时也有打印)。希望它能帮到你
awk -F":" '
$1 !~ /^#/ && (counter[$3]>0) {a++;print "REPEATED|UID:"$3"|"$0"|"LastReaded[$3]; repeateds["a"a]=$0; repeateds["b"a]=LastReaded[$3]}
$1 !~ /^#/ { counter[$3]++; LastReaded[$3]=$0}
END {for (i in repeateds)
{
print i"|"repeateds[i]
}
}
' /etc/passwd
REPEATED|UID:229|pepito:*:229:229:pepito:/var/empty:/usr/bin/false|_avbdeviced:*:229:-2:Ethernet AVB Device Daemon:/var/empty:/usr/bin/false
a1|pepito:*:229:229:pepito:/var/empty:/usr/bin/false
b1|_avbdeviced:*:229:-2:Ethernet AVB Device Daemon:/var/empty:/usr/bin/false