【发布时间】:2020-07-07 11:38:40
【问题描述】:
使用 awk 我想要这样的东西:
bin/bash: user1, user2
another shell path: user3, user4
等等。直到显示所有路径和用户
我只知道如何使用“seen”从 /etc/passwd 获取所有 shell:
awk -F: '(!seen[$7]++){print $7}' /etc/passwd
有人知道怎么做吗?
【问题讨论】:
使用 awk 我想要这样的东西:
bin/bash: user1, user2
another shell path: user3, user4
等等。直到显示所有路径和用户
我只知道如何使用“seen”从 /etc/passwd 获取所有 shell:
awk -F: '(!seen[$7]++){print $7}' /etc/passwd
有人知道怎么做吗?
【问题讨论】:
你可以使用这个awk:
awk -F: 'NF>5{a[$NF] = ($NF in a ? a[$NF] ", " : "") $1}
END{for (i in a) print i ":", a[i]}' /etc/passwd
【讨论】:
($NF in a ? a[$NF] ", " : "") 是如何工作的,你能用问号解释一下语法吗?
expr1 ? expr2 : expr3 与 if (expr1) { expr2 } else { expr3 } 类似,只是它的计算结果为相应表达式的结果。
使用始终有用的GNU datamash 实用程序而不是awk 的替代方法:
$ datamash -t: -s -g7 collapse 1 < /etc/passwd
/bin/bash:root
/bin/false:syslog,messagebus,landscape,pollinate,colord,systemd-timesync,systemd-network,systemd-resolve,systemd-bus-proxy,uuidd,_apt
/bin/sync:sync
/usr/bin/zsh:shawn
/usr/sbin/nologin:daemon,bin,sys,games,man,lp,mail,news,uucp,proxy,www-data,backup,list,irc,gnats,nobody,sshd
(按排序后的第 7 个:-delimited 字段分组,并且对于每个组,显示所有第一个字段的值,以逗号分隔)
【讨论】: