I have an input file that contains the primary and secondary groups a user should have based on a pre-defined role. The input file looks like this:
After I execute my script to do some grepping I have the following user file where the secondary groups are defined by the role:
The problem I have is that GID's must be resolved to their group name and then have the corresponding users added to an upload file that would look like your typical group entry:
I need to sort and uniq the GID file, grep the GID in the output file to see which users require that GID, and then append them to the group upload entry. I don't know if this is necessary but I put I'm using a few temp files to store output and I'm at the part where I have all the sorted and uniq'd groups in a temp file. What I need to do is grep the GID through the user file and then append that user to the upload file where each match of the group would replace user_1, respectively. So, if my user file looked like this:
my upload file would look like this (the GID's are translated to group names):
Can you help me setting up the group upload file?
how are the GID's translated? does the output file already exist and need to be amended? or is it a separate input file. is it the same format without any users then?
For the GID translation I simply "getent group | cut -d: -f1,3 > groups" and then I grep the GID in the groups file. It has to be this way due to circumstances beyond my control.
The output file could possibly be amended with the entries of the group upload file (sorry for the "file" terminologies). I don't see any reason why that would be a problem but if it was I could easily find a delimiter and cut them back into separate files. I think it would be ideal for them to be separate files because the system accepting group modifications in bulk will only accept input in the manner I have specified (group:x:gid:user1,user2,user3,<etc>). It would be the same format without any users however I don't believe any grep of the GID's in the user file would not return a result. But it's ok if there's an entry that's just: group:x:gid:
Thanks, scott. I'm still examining this before I run it. I'm confused on where it is accepting input. I think it is the while ((cmd | getline) but I'm not familiar with getline and "getent group" will simply list all groups in the system, not the specific ones I'm determining. Still reading through it but wanted to give my thanks in advance.
ok it is a lot. if you put in separate file and make executable, you run ./script users > upload-file. or you can put all of it in single quotes and use it inside of existing shell script:
so it gets the user file as parameter. it first runs getent itself, once, instead of many times and grepping it etc. in the end it will only print groups which it added users to.
awk is quick at text manipulations. probably the rest of the script would incorporate well into it.
So far this works for me - still testing. I'm not familiar w/ using arrays or built-in awk variables but I've been googling and will eventually practise to become more knowledgeable. I've made a few tweaks:
The secondary groups actually start in field 11, so after a bit of tinkering I changed "i" to 11 instead of 4. For some reason the output is always preceded by a "it doesn't exist!" error but the user is also properly included in the respective groups output by the script.
The groups and respective GID's have slight conflicts per server (maybe 5% of the GID's conflict across all servers) so what i typically do is pull them all into 1 big file then sort and uniq them. So, instead of "getent" I replaced that with "cat <group_file>" and it seems to work. I just need to make sure the tool that accepts the group upload file will notify of any conflicts and not wipe out anything which I will do.
I still have a lot to learn about this script but does that sound right - replacing i with 11 instead of 4? Everything appears to check out so far.
Edit: Darn - I also have to sort GID upload files by server so I upload them to the proper one It just gets better and better!
Hi,
I need to do some section/group sorting. At the moment, I get around it by grep group by group and then re-directing to the same 'final' output file.
Below is what's been sorted so far based on the second field
$ awk -F"," '{ { print $5 " == " $6 } }' /tmp/x.csv | grep -v "^env" | grep... (2 Replies)
Hi Everyone,
I have below record set. File is fixed widht file
101newjersyus 20150110
101nboston us 20150103
102boston us 20140106
102boston us 20140103
I need to group record based on first 3 letters in our case(101 and 102)
and sort last 8 digit in ascending order and print only... (4 Replies)
Hi, I'm new to the world of UNIX and have been asked to create a complex script (at least complex to me:confused:) for AIX UNIX to create a report of all the users on the server including server, user, UID, groups, GID, etc.
Found a script using lsuser, but the output is still lacking. 2 things I... (2 Replies)
Hi All
I've googled around for this and can't see a way of doing it.
I have a file that contains a number of records that are layed out something like the following.
/path/to/directory/that/contains/a/file/I/need/filename.pdf
The path itself can vary both in terms of the names and the... (7 Replies)
How can I retrieve the group id of an entry in the /etc/group file given the group name?
I tried using cut and grep but cant get around the problem..
I think this problem can be solved using these commands but I dont know how (I am a newbie at this) (11 Replies)