我想我可能以错误的方式解决了这个问题,我真的可以在这里使用一只手。 我正在尝试使用awk将报告打印到屏幕上。我想列出登录的用户以及每个用户旁边的全名。我能想出来的唯一方法是下面,但它只显示我自己的信息。我能以某种方式将其添加到循环中以实现此目的,还是我完全错了?
这就是我所拥有的:
echo "User name" "|" "Full name"
echo "--------------------------"
echo -n "$USER " ; awk -v user="$USER" -F":" 'user==$1{print$5}' /etc/passwd
答案 0 :(得分:2)
$USER
变量只包含您的用户名。
您可以通过管道who
命令获取已登录用户的列表。
echo "User name" "|" "Full name"
echo "--------------------------"
who | while read username rest; do
echo -n "$username " ; awk -v user="$username" -F":" 'user==$1{print$5}' /etc/passwd
done
答案 1 :(得分:0)
每当你发现自己在shell中编写循环来处理文本时,你的解决方案都是错误的。
who | awk '
BEGIN { print "User name|Full name\n--------------------------" }
NR==FNR { name[$1] = $5; next }
{ print $1, name[$1] }
' FS=":" /etc/passwd FS=" " -
Shell只是一个可以调用工具的环境,它有一种语言可以对这些调用进行排序。处理文本的shell工具是awk。