Para obter o nome de usuário mais longo (e seu tamanho):
$ getent passwd | awk -F':' '{ print length($1), $1 }' | sort -rn | head -n 1
11 _traceroute
Ou seja, obtenha o arquivo passwd
, calcule o tamanho de cada nome de usuário (a 1a :
-delimited string), classifique por tamanho e escolha o primeiro.
Se houver vários nomes de usuário do mesmo tamanho, o que ordena por último lexicograficamente é escolhido.
Para obter o nome real mais longo (e ver qual nome de usuário é o nome real e o comprimento):
$ getent passwd | awk -F':' '{ print length($5), $1, $5 }' | sort -rn | head -n 1
32 _rtadvd IPv6 Router Advertisement Daemon
Isso faz a mesma coisa que o primeiro comando, mas calcula o comprimento da quinta string:
-delimited no arquivo passwd
. Este campo contém o nome real do usuário. A saída é o tamanho do nome real, o nome de usuário e o nome real.
Em alguns sistemas, um &
no nome real do usuário será substituído pelo nome de usuário quando o campo for acessado por certas ferramentas como finger
ou sendmail
. Por exemplo, uma entrada passwd
pode ser
operator:*:2:5:System &:/operator:/sbin/nologin
Para levar isso em conta ao calcular o tamanho do nome real:
getent passwd | awk -F':' '{ gsub("&", $1, $5); print length($5), $1, $5 }' | sort -rn | head -n 1
Além disso, deixe awk
selecionar o nome mais longo, livrando-se do sort
e head
:
getent passwd |
awk -F':' '
{ gsub("&", $1, $5) ; len = length($5) }
len > max { line = $0 ; max = len; }
END { split(line, a, FS); print max, a[1], a[5] }'
Com este código, o nome mais longo encontrado será escolhido se houver vários nomes com o mesmo tamanho.