【问题标题】:Grouping users by command/shell (the last element of /etc/passwd) with awk使用 awk 按命令/shell(/etc/passwd 的最后一个元素)对用户进行分组
【发布时间】: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  

有人知道怎么做吗?

【问题讨论】:

    标签: bash sorting awk


    【解决方案1】:

    你可以使用这个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] ", " : "") 是如何工作的,你能用问号解释一下语法吗?
    • @Flamenco expr1 ? expr2 : expr3if (expr1) { expr2 } else { expr3 } 类似,只是它的计算结果为相应表达式的结果。
    【解决方案2】:

    使用始终有用的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 字段分组,并且对于每个组,显示所有第一个字段的值,以逗号分隔)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2018-01-24
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多