最長のユーザー名を印刷してください。

最長のユーザー名を印刷してください。

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がユーザー名に置き換えられます。たとえば、次の項目があるとします。fingersendmailpasswd

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削除して最長の名前を選択してください。sorthead

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] }'

このコードを通して、初めて発見同じ長さの名前が複数ある場合は、最も長い名前が選択されます。

おすすめ記事