Solaris "클린" 그룹 파일(또는 임의의 텍스트 파일)

Solaris "클린" 그룹 파일(또는 임의의 텍스트 파일)

나는 많은 수의 서버에서 /etc/group 파일에 대한 정리 작업을 스크립트하는 방법을 찾고 있습니다. 특정 그룹의 사용자를 여러 번 찾습니다.

즉, somegroup::100000:userA, userB, userC, foo, bar, snafu, userB, userB

분명히 소규모 그룹의 경우 이 작업은 쉽고 수동으로 수행할 수 있지만 많은 수의 그룹과 항목이 포함된 일부 그룹 파일이 있습니다.

쉽기 때문에 Java로 작성하려고 생각했지만 Perl이나 Shell에서 찾는 것을 선호합니다.

감사해요!

답변1

이를 수행하는 Perl 스크립트는 다음과 같습니다.

while (<>) {
    chomp;
    my ($name, $pass, $gid, $users) = split ':';
    my %userset;
    my @users = split ',', $users;
    # create a set (a hash with undef keys) by assigning to hash slice
    @userset{@users} = ();
    $users = join ',', sort(keys(%userset));
    print join(':', $name, $pass, $gid, $users). "\n";
}

다음과 같이 사용하세요:

$ ./fixgroups <group >group.tmp
$ diff -u group group.tmp
-somegroup::100000:userA,userB,userC,foo,bar,snafu,userB,userB
+somegroup::100000:bar,foo,snafu,userA,userB,userC
$ mv group.tmp group

관련 정보