Группировка пользователей по команде / оболочке (последний элемент / etc / passwd) с помощью awk - PullRequest
1 голос
/ 26 марта 2020

используя awk. Я хочу вот что:

bin/bash: user1, user2
another shell path: user3, user4

et c. пока все пути и пользователи не отображаются

Я только понял, как получить все оболочки из / etc / passwd, используя 'seen':

awk -F: '(!seen[$7]++){print $7}' /etc/passwd  

У кого-нибудь есть идеи, как это сделать

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Альтернативный подход с использованием всегда полезной утилиты 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-м :, после сортировки, и для каждой группы показать все значения первого поля, разделенные запятыми)

1 голос
/ 26 марта 2020

Вы можете использовать это awk:

awk -F: 'NF>5{a[$NF] = ($NF in a ? a[$NF] ", " : "") $1}
END{for (i in a) print i ":", a[i]}' /etc/passwd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...