/etc/group에서 멤버를 알파벳순으로 정렬하는 방법은 무엇입니까?

/etc/group에서 멤버를 알파벳순으로 정렬하는 방법은 무엇입니까?

/etc/group파일에는 파일 공유에 필요한 다양한 그룹이 있고 해당 그룹의 구성원이 나열되어 있습니다. 이 목록 중 일부는 매우 길어서 정렬할 수 있는 방법을 찾고 싶습니다.회원각 그룹의. 쉬운 방법이 있나요?

저는 Debian 9에서 Bash를 사용하고 있습니다.

지금까지 그룹을 선택하고 멤버를 알파벳순으로 정렬하는 방법을 이해했습니다.

grep groupa /etc/group | cut -d":" -f4 | tr "," "\n" | sort

이를 위해서는 알려진 그룹의 이름이 필요합니다.

답변1

그룹 파일의 각 줄을 읽습니다. 멤버를 쉼표로 구분하고 정렬한 후 다시 합칩니다. 다른 변경되지 않은 구성 요소와 함께 이 줄을 인쇄합니다.

while IFS=: read u x g members
do
    members=$(tr ',' '\n' <<<"$members" | sort | xargs | tr ' ' ',')
    printf "%s:%s:%d:%s\n" "$u" "$x" $g "$members"
done </etc/group

답변2

Awk 또는 Perl을 사용할 수 있습니다.

gawk -F: '
  $4 != "" {
    n = split($4,a,/,/);
    asort(a);
    for (i=1;i<n;i++) printf "%s,", a[i];
    print a[n]
  }
' /etc/group

또는

perl -F: -lne '
  print join ",", sort split /,/, $F[3] if $F[3] =~ /\S/
' /etc/group

둘 다 빈 구성원 목록이 있는 그룹을 건너뜁니다. 원하는 경우 해당 테스트를 생략하거나 다른 필드를 재정의할 수도 있습니다.

$ perl -F: -lne 'print join ":", @F[0..2], join ",", sort split /,/, $F[3]' /etc/group > group.sorted
$
$ diff /etc/group group.sorted 
5c5
< adm:x:4:syslog,steeldriver
---
> adm:x:4:steeldriver,syslog

관련 정보