Como imprimo todos os nomes de usuário que possuem o mesmo UID em '/ etc / passwd' usando o awk?

-1

Como imprimo todos os nomes de usuário que têm o mesmo UID em /etc/passwd ?

Este é o meu comando

$ awk -F: '{print $3, $1}' us.txt | sort   
0 daemon
0 pepe
0 root
2 bin
2 jacinto
3 paco
    
por Anique Awan 12.05.2015 / 20:47

2 respostas

0

Mantenha uma contagem para cada UID, salve UIDs e imprima as entradas cujos UIDs apareceram mais de uma vez:

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

Você pode percorrer o arquivo duas vezes:

awk -F: 'FNR==NR{count[$3]++; next}
         count[$3]>1 && !seen[$1] {
               print $1, $3, "("count[$3]" times)"; seen[$1]++
        }' /etc/passwd{,}
  • Primeira vez para manter um contador de quantas vezes cada UID aparece.
  • Segunda vez para imprimir todos os valores que apareceram mais de uma vez.

Como um forro:

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

Um exemplo de saída seria:

root 0 (2 times)
    
por fedorqui 13.05.2015 / 11:06