greping $2 into a list

Hi
When I run this command:

lsuser -a auditclasses ALL

I got:

user1 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
user2 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
user3 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
user4 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
.
.

so, I need a script to show ONLY if a "auditclasses" entry is different from the "general,objects,cron,files,rbac,audit,lvm,aixpert" string.

NOTES:

  • AIX 5.x and 6.1
  • ksh
  • lot of users in lsuser output.

thanks
regards
Israel.

lsuser -a auditclasses ALL | grep -v "auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert"
 
# lsuser -a auditclasses ALL 
user1 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
user2 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
user3 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
user4 auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert
user5 auditclasses=generalXX,objects,cron,files,rbac,audit,lvm,aixpert
.
.
 
# ./justdoit
user5 auditclasses=generalXX,objects,cron,files,rbac,audit,lvm,aixpert
#!/bin/ksh
lsuser -a auditclasses ALL | while IFS= read -r var
  do
    if [[ $(echo ${var}|sed 's/.*auditclasses=\(.*\)/\1/') != "general,objects,cron,files,rbac,audit,lvm,aixpert" ]]
       then
         echo "$var"
    fi
  done

That's it

thanks ygemici

As far as I recall the Korn shell on AIX is ksh93 - so the following should work:

lsuser -a auditclasses ALL |
while read user ac
do
   [[ ${ac} == auditclasses=* && ${ac} != "auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert" ]] && echo ${ac}
done

Hi fpmurphy

/usr/bin/ksh93 is not the default korn shell for AIX. /usr/bin/ksh is. but I can use ksh93 without problems.. thanks for your reply.

regards
Israel.

i think this would work.. correct me if ive gone wrong.

#! /usr/bin/perl

use strict;
use warnings;

my $command = 'lsuser -a auditclasses ALL';

open(my $FH,"-|",$command) or die "Error $! executing $command\n";

while(<$FH>)
{
   if(!/^.*auditclasses=general,objects,cron,files,rbac,audit,lvm,aixpert.*/)
      {
      print;
      }
}
close $FH;

 # return value automatically stored in $?
   if($? != 0)
   {
       print "Something went wrong\n";
    }

Hi abhijithtk

Sorry the delay, I couldn't test your code because I dont have perrl installed on my systems. I'll try on a test server... thanks.. Israel.