Как мне распечатать все имена пользователей с одинаковыми UID в `/etc/passwd` с помощью awk?

Как распечатать все имена пользователей с одинаковыми UID в /etc/passwd?

Это моя команда

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

2 ответа

Решение

Сохраните счет для каждого 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

Вы можете дважды просмотреть файл:

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)
Другие вопросы по тегам