Shell Script to ignore # and take corresponding user and group


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell Script to ignore # and take corresponding user and group
# 1  
Old 12-07-2011
Shell Script to ignore # and take corresponding user and group

Hi,

I have a following file:

Code:
role.IMPACT_USER.user=admin
role.IMPACT_USER.user=dd12345
role.IMPACT_USER.user=ss76767
#role.IMPACT_USER.user=root
#role.IMPACT_USER.group=System
role.IMPACT_USER.group=ImpactUser
#Description: Allow users to login in to Impact, start and stop service but no creating or editing policies
role.NETCOOL_ADMIN.user=admin
role.IMPACT_USER.user=ss76767
#role.NETCOOL_ADMIN.group=System
role.NETCOOL_ADMIN.group=NetcoolAdmin
#Description: Allow users to login in to Impact, start and stop service and create policies 

role.OPVIEW_USER.user=admin
role.IMPACT_USER.user=rr76767
role.IMPACT_USER.user=ss76767
role.IMPACT_USER.user=dd12345
#role.OPVIEW_USER.group=
role.OPVIEW_USER.group=OpViewUser
#Description: Allow users to login in to Impact, start and stop service and create operator view

This file contains lots of # marks.

I want to collect the corresponding user, group and Description (which contains hash mark)

A user may belong to many group so I want to collect those users and make it in the format given below:

Code:
Login ID: user
Application Function Title Code: group
Application Function Title Code Description: Description

Any script to start up should be fine.

Thanks,
# 2  
Old 12-07-2011
Please, put an example of the output for the input above!

It is not clear what you want (at least to me!).
# 3  
Old 12-07-2011
Hi

Thanks for your reply.

The output should look like this:

Code:
 
Login ID     Appl Func Title Code   Appl Func Title Code Description
admin          ImpactUser            Allow users to login in to <snip>
admin          NetcoolAdmin   Allow users to login in to Impact start<snip> 
admin          OpViewUser          Allow users to login create operator
dd12345       ImpactUser         Allow users to login in to <snip>
ss76767       ImpactUser         Allow users to login in to <snip>
ss76767       OpViewUser        Allow users to login create operator          
ss76767       NetcoolAdmin    Allow users to login in to Impact start<snip>  
rr76767        OpViewUser      Allow users to login create operator<snip>

Thanks,
# 4  
Old 12-07-2011
Shell script method. With hindsight the processing would have been easier by reading the file backwards!
Lose the "cut" for the final version.
Script reads each line (ignoring blank lines and lines starting #role) and saves the value of "group" and saves each user role record until it finds a Description line .. when it outputs one reformatted line for each user role line. These lines are sorted to alphabetic order using "sort" on the whole output of the Shell block.
Code:
#!/bin/ksh
workfile=/tmp/`basename $0`.tmp
>${workfile}
#
echo "Login ID     Appl Func Title Code   Appl Func Title Code Description"
(
grep -v \^\#"role" filename.txt | sed -e "/^$/d" | while read line
do
        echo "${line}"|awk -F: '{print $1,$2}' | \
                read description_record description_text
        if [ "${description_record}" = "#Description" ]
        then
                # End of data block processing. Read back role lines
                cat ${workfile} | while read line2
                do
                        echo "${line2}"|awk -F\. '{print $1,$2,$3}' | \
                                read record_type role rest
                        echo "${rest}"|awk -F\= '{print $1,$2}' | \
                                read user_group1 user_group2
                # Display final user record
                echo "${user_group2} ${save_group} ${description_text}" | \
                        cut -c1-70
                done
                #
                >${workfile}
                save_group=""
                continue
        fi
        echo "${line}"|awk -F\. '{print $1,$2,$3}' | \
                read record_type role rest
        echo "${rest}"|awk -F\= '{print $1,$2}' | \
                read user_group1 user_group2  
        #
        # Save group name
        if [ "${user_group1}" = "group" ]
        then
                save_group="${user_group2}"
                continue
        fi
        #
        # Save user role records until we see a Description record
        echo "${line}" >> ${workfile}
done
) | sort
#
rm ${workfile}


Login ID     Appl Func Title Code   Appl Func Title Code Description
admin ImpactUser Allow users to login in to Impact, start and stop ser
admin NetcoolAdmin Allow users to login in to Impact, start and stop s
admin OpViewUser Allow users to login in to Impact, start and stop ser
dd12345 ImpactUser Allow users to login in to Impact, start and stop s
dd12345 OpViewUser Allow users to login in to Impact, start and stop s
rr76767 OpViewUser Allow users to login in to Impact, start and stop s
ss76767 ImpactUser Allow users to login in to Impact, start and stop s
ss76767 NetcoolAdmin Allow users to login in to Impact, start and stop
ss76767 OpViewUser Allow users to login in to Impact, start and stop s


Note: The Descriptions in your example output do not match the Descriptions in the data.

Last edited by methyl; 12-07-2011 at 12:50 PM..
# 5  
Old 12-08-2011
Hi Methyl,

Thanks for your excellent code. I was thinking I will get some startup with not sure how to start did not expect an full answer.

Thanks again

Smilie

---------- Post updated at 08:01 PM ---------- Previous update was at 12:59 PM ----------

Hi Methyl,

Also we have another file like below:

Code:
########################################################## {COPYRIGHT-TOP-RM} ###
# Licensed Materials - Property of IBM
# "Restricted Materials of IBM"
#
# 5724-S43
# (C) Copyright IBM Corp. 2008, 2009
#
########################################################## {COPYRIGHT-END-RM} ###

###############################################################################
# INSTALL OPTIONS
###############################################################################
# multiple lines: installOption=xx yy zz
#installOption=-nopreCompileJSPs
#installOption=-distributeApp
#installOption=-nouseMetaDataFromBinary
#installOption=-nodeployejb
#installOption=-appname guiserver
#installOption=-createMBeansForResources
#installOption=-noreloadEnabled
#installOption=-nodeployws
#installOption=-validateinstall warn
#installOption=-noprocessEmbeddedConfig
#installOption=-filepermission .*\.dll=755#.*\.so=755#.*\.a=755#.*\.sl=755
#installOption=-noallowDispatchRemoteInclude
#installOption=-noallowServiceRemoteInclude
installOption=-MapRolesToUsers [[ IMPACT_USER AppDeploymentOption.No AppDeploymentOption.No @@role.IMPACT_USER.user@@ @@role.IMPACT_USER.group@@ ] [ NETCOOL_ADMIN AppDeploymentOption.No AppDeploymentOption.No @@role.NETCOOL_ADMIN.user@@ @@role.NETCOOL_ADMIN.group@@ ] [ OPVIEW_USER AppDeploymentOption.No AppDeploymentOption.No @@role.OPVIEW_USER.user@@ @@role.OPVIEW_USER.group@@ ]]
#installOption=-MapWebModToVH [[jmx-gui.war jmx-gui.war,WEB-INF/web.xml default_host] [nsservices nameserver.war,WEB-INF/web.xml default_host] [nci.war nci.war,WEB-INF/web.xml default_host] [netcool-security.war netcool-security.war,WEB-INF/web.xml default_host] [netcool.war netcool.war,WEB-INF/web.xml default_host] [opview.war opview.war,WEB-INF/web.xml default_host] ]

###############################################################################
# ROLE SETTINGS
#
# The format of the options below is role.<rolename>.[user|group], where
# rolename, for the GUI Server, can take on the values of IMPACT_USER,
# NETCOOL_ADMIN, or OPVIEW_USER. These roles must be granted to either users
# or groups managed within VMM (Virtual Member Manager). Please put each
# user/group mapping on its own line.
#
# NOTE: A user must be assigned both the IMPACT_USER and NETCOOL_ADMIN roles
#       in order to access the Impact GUI Server interface 
###############################################################################
role.IMPACT_USER.user=admin
#role.IMPACT_USER.user=root
#role.IMPACT_USER.group=System
role.IMPACT_USER.group=ImpactUser
#Description: Allow users to login in to Impact, start and stop service but no creating or editing policies
role.NETCOOL_ADMIN.user=admin
#role.NETCOOL_ADMIN.group=System
role.NETCOOL_ADMIN.group=NetcoolAdmin
#Description: Allow users to login in to Impact, start and stop service and create policies 
role.OPVIEW_USER.user=admin
#role.OPVIEW_USER.group=
role.OPVIEW_USER.group=OpViewUser
#Description: Allow users to login in to Impact, start and stop service and create operator view

How to just get the following output

Code:
Login ID     Appl Func Title Code   Appl Func Title Code Description
admin             ImpactUser        Allow users to login in to Impact, start and stop service but no creating or editing policies
admin     NetcoolAdmin      Allow users to login in to Impact, start and stop service and create policies 
admin     OpViewUser  Allow users to login in to Impact, start and stop service and create operator view

Thanks
# 6  
Old 12-08-2011
This is the same format file as before but with an awkward header section.
We can jump the header section with "sed" and start from the first line starting with "role".
Code:
Minor change to original code:
sed -n '/^role/,$ p' filename.txt | grep -v \^\#"role" |  .... etc

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to ignore mutiple strings when using shell script?

Hi All, I am trying to use below syntax to find ignore multiple locations while searching for a file. find / -name "$serviceitem" ! -size 0 2>&1 |egrep -v "tmp|docker|WinSxS|Permission|HISTORY|alternatives|bearer11ssl|manifest" I tried to assign all the ignore strings to one variable... (2 Replies)
Discussion started by: sravani25
2 Replies

2. Shell Programming and Scripting

Emulate group-by in shell script

Hello All, I saw this problem on one of the forum and solved it using group-by in oracle sql, though I am a bit curious to implement it using shell script : There is a file having number of operations : Opeation,Time-Taken operation1,83621 operation2,72321 operation3,13288... (11 Replies)
Discussion started by: mukulverma2408
11 Replies

3. Shell Programming and Scripting

Shell script - group by

Hi, I have text file as shown below. root 25 oracle 25 batch 30 griduser 32 admin 35 root 25 oracle 25 batch 30 griduser 32 oracle 25 batch 30 griduser 32 xuser 45 admin 35 I want to group by based on user name, and the output need to be as below. Not necessary the username to be... (10 Replies)
Discussion started by: baladelaware73
10 Replies

4. Red Hat

User is a Part of a Group But Group Details Do Not Show the User

Hi, In the following output you can see the the user "richard" is a member on the team/group "developers": # id richard uid=10247(richard) gid=100361(developers) groups=100361(developers),10053(testers) but in the following details of the said group (developers), the said user... (3 Replies)
Discussion started by: indiansoil
3 Replies

5. Shell Programming and Scripting

Ignore Folder in Shell Script ?

Hi, I currently use a script to extract *.deb files located in a Directory called "/var/mobile/Media/Downloads" The Problem is howver I want the script to ignore the folder: "/var/mobile/Media/Downloads/New Debs and Files" (it shall NOT decompile any of the files in that folder. Here is... (2 Replies)
Discussion started by: pasc
2 Replies

6. Shell Programming and Scripting

New To UNIX - Need Script to create report of user & group accounts

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)
Discussion started by: panthur
2 Replies

7. Shell Programming and Scripting

Ignore lines in Shell Script

Hi, I have a shell script, which reads a *.txt file - line by line. In this text file, I have some lines beginning with "#" that I want to ignore : MY_FILE #blah blah blah 1 blah blah blah 2 blah blah blah 3 #blah blah blah 4 I want my script to read only the following lines... (3 Replies)
Discussion started by: ad23
3 Replies

8. Shell Programming and Scripting

script to ignore the user from list of users

Hi, I have a situation where I want to ignore few users from list of users and print rest of user in log file. say, I want to ignore aaa, bbb, ccc, ddd .. ppp from list of 20 user (do not want to include) What is the good command or any script? Thanks in advance. (1 Reply)
Discussion started by: sumit30
1 Replies

9. Shell Programming and Scripting

Shell script to rename a group of files

Hello, I am having 1800 files in a directory with a specified format, like amms_850o_prod.000003uNy amms_850o_prod.000003u8x amms_850o_prod.000003taP amms_850o_prod.000003tKy amms_850o_prod.000003si4 amms_850o_prod.000003sTP amms_850o_prod.000003sBg amms_850o_prod.000003rvx... (12 Replies)
Discussion started by: atlantis
12 Replies
Login or Register to Ask a Question