如何使用 awk 打印“/etc/passwd”中具有相同 UID 的所有用户名?

如何使用 awk 打印“/etc/passwd”中具有相同 UID 的所有用户名?

如何打印所有具有相同 UID 的用户名/etc/passwd

这是我的命令

$ awk -F: '{print $3, $1}' us.txt | sort   
0 daemon
0 pepe
0 root
2 bin
2 jacinto
3 paco

答案1

对每个 UID 进行计数并保存 UID,然后打印那些 UID 出现多次的条目:

awk -F: '{count[$3]++; users[$3] = $1 " " users[$3]} END {for (i in count) {if (count[i] > 1) { print users[i] } } }' /etc/passwd

答案2

您可以循环遍历该文件两次:

awk -F: 'FNR==NR{count[$3]++; next}
         count[$3]>1 && !seen[$1] {
               print $1, $3, "("count[$3]" times)"; seen[$1]++
        }' /etc/passwd{,}
  • 第一次保留每个 UID 出现次数的计数器。
  • 第二次打印所有出现多次的值。

一句话:

awk -F: 'FNR==NR{count[$3]++; next} count[$3]>1 && !seen[$1] {print $1, $3, "("count[$3]" times)"; seen[$1]++}' /etc/passwd{,}

示例输出为:

root 0 (2 times)

相关内容