Linuxでユーザー名の最も長い名前を印刷する方法があるかどうかを知りたいです。できますか?
ベストアンサー1
最長のユーザー名(および長さ)を取得するには:
$ getent passwd | awk -F':' '{ print length($1), $1 }' | sort -rn | head -n 1
11 _traceroute
つまり、passwd
ファイルをインポートして各ユーザー名の長さ(最初の:
区切り文字列)を計算し、長さでソートしてから最初の項目を選択します。
同じ長さのユーザー名が複数ある場合は、アルファベット順に最後のユーザー名が選択されます。
最長の本名を取得するには(そして本名が何であるか、どのくらい長いかを確認するには):
$ getent passwd | awk -F':' '{ print length($5), $1, $5 }' | sort -rn | head -n 1
32 _rtadvd IPv6 Router Advertisement Daemon
:
これは最初のコマンドと同じことを行いますが、ファイル内の5番目に区切られた文字列の長さを計算しますpasswd
。このフィールドにはユーザーの実際の名前が含まれます。出力は、実名、ユーザー名、実名の長さです。
一部のシステムでは、&
特定のツール(または)を介してフィールドにアクセスすると、ユーザーの実際の名前のaがユーザー名に置き換えられます。たとえば、次の項目があるとします。finger
sendmail
passwd
operator:*:2:5:System &:/operator:/sbin/nologin
実名の長さを計算するときは、次の点を考慮してください。
getent passwd | awk -F':' '{ gsub("&", $1, $5); print length($5), $1, $5 }' | sort -rn | head -n 1
そして、以下をawk
削除して最長の名前を選択してください。sort
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] }'
このコードを通して、初めて発見同じ長さの名前が複数ある場合は、最も長い名前が選択されます。