Need help with output


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Need help with output
# 8  
Old 04-19-2011
Here is what happens:

I want to create a script. The script will ask me to enter one argument which will be a user prefix.

My script will take the prefix and search two areas for the user. One will be the who command to see if anyone with that prefix is logged on.

Another is the etc/passwd file to get the actual persons name.

I will then print it out on individual lines.

Here is where I am at:

Code:
# I take in the user prefix (lets say its q123 because eveyone who works in dept Q 
# starts with a Q123 as their id. Joe may be Q123rt, Sally Q123ff etc.
usrr="$1"

 
# Now I look to see all people logged on with the prefix entered on command line
loggedOn=$(who | cut -d' ' -f1 | grep $usrr)
 
# Here I check to see if employees exist
employee=$(cat /etc/passwd | grep "$usrr")

 
# Here I am taking that prefix and pulling the names of all logged in users then 
# reversing them to a first name, last name format
output=$(cat /etc/passwd | grep "$loggedOn" | cut -d: -f5 | tr -s ',' ' ' | sed 's/\(.*\) \(.*\)/\2 \1/')

# Now, my script I have thus far
if [ -z "$employee" ]
then
echo "Invalid prefix"
exit 2
fi
if [ -z "$loggedOn" ]
then
echo "No such user is on right now"
exit 1
else
echo $(who | awk '{print "Hello " $output}')
fi

What I get for output is a jumbled mess.

Can you figure it out with what I supplied? I am headed to Barnes and Noble soon to grab a better book. Trying to teach myself and its been a struggle!!
# 9  
Old 04-20-2011
I love using perl for these cases. Bash script can also be written but the code size will be big. I can still help you out if you need this only in bash.

Here is the perl snippet you can use. Perl is default on unix machines these days.

Code:
#! perl
die "Input a pattern as argument!" if (not $ARGV[0]);
@loggedOn = `who | cut -f1 -d " " | grep "^$ARGV[0]" | sort | uniq `;
die "Pattern doesn't match into any of the logged on users" if (not scalar @loggedOn);
foreach $i (@loggedOn) {
chomp $i;
$fullname = `grep "$i:" /etc/passwd | cut -d: -f5 | tr -s ',' ' ' | sed 's/\(.*\) \(.*\)/\2 \1/'`;
chomp $fullname;
print "WARNING: $i is not in passwd file\n" if (not $fullname);
next if not $fullname;
print "Hello ***$fullname\n";
}

Moderator's Comments:
Mod Comment Please use [code] and [/code] tags when posting code, data or logs etc. to preserve formatting and enhance readability, thanks.

Last edited by zaxxon; 04-20-2011 at 07:54 AM.. Reason: code tags
# 10  
Old 04-20-2011
Quote:
Originally Posted by bhagya_raj
I love using perl for these cases. Bash script can also be written but the code size will be big. I can still help you out if you need this only in bash.

Here is the perl snippet you can use. Perl is default on unix machines these days.

Code:
#! perl
die "Input a pattern as argument!" if (not $ARGV[0]);
@loggedOn = `who | cut -f1 -d " " | grep "^$ARGV[0]" | sort | uniq `;
die "Pattern doesn't match into any of the logged on users" if (not scalar @loggedOn);
foreach $i (@loggedOn) {
chomp $i;
$fullname = `grep "$i:" /etc/passwd | cut -d: -f5 | tr -s ',' ' ' | sed 's/\(.*\) \(.*\)/\2 \1/'`;
chomp $fullname;
print "WARNING: $i is not in passwd file\n" if (not $fullname);
next if not $fullname;
print "Hello ***$fullname\n";
}

Moderator's Comments:
Mod Comment Please use [code] and [/code] tags when posting code, data or logs etc. to preserve formatting and enhance readability, thanks.
you are just using shell commands inside Perl. ! You do know that Perl is capable of string processing on its own, right? And why is your shebang !Perl ?
# 11  
Old 04-21-2011
I knew that Smilie I tried to keep the script very simple not using too much of perl expressions so that beginners can understand what's happening with the script. Anyways, I modified the script to user regular expressions and is pasted below Smilie thanks for making me write this Smilie
Code:
#! perl
$passwdfile = "passwd";
die "Input a pattern as argument!" if (not $ARGV[0]);
@loggedOn = `who`;
foreach $name (@loggedOn) { $n = (split(/\s+/,$name))[0]; next if $n !~ /^$ARGV[0]/i; $users{$n} = 1; }
   die "Pattern doesn't match into any of the logged on users" if (not scalar keys %users);
  open (file, $passwdfile) || die "couldn't open $passwdfile: $?";
  foreach $line (<file>) {
          ($username,$fullname) = (split(/:/,$line))[0,4];
  $fullname =~ s/,/ /g;
  $full{$username} = $fullname;
}
foreach $i (sort keys %users) {
  if (not exists $full{$i}) {print "WARNING: $i is not in passwd file\n"; next;}
    print "Hello ***$full{$i}\n";
}


Last edited by Scott; 04-21-2011 at 04:28 AM.. Reason: Code tags, please...
# 12  
Old 04-21-2011
you are making it worse.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Redirect script output to a file and mail the output

Hi Guys, I want to redirect the output of 3 scripts to a file and then mail the output of those three scripts. I used below but it is not working: OFILE=/home/home1/report1 echo "report1 details" > $OFILE =/home/home1/1.sh > $OFILE echo... (7 Replies)
Discussion started by: Vivekit82
7 Replies

2. Red Hat

Command understanding the output file destination in case of standard output!!!!!

I ran the following command. cat abc.c > abc.c I got message the following message from command cat: cat: abc.c : input file is same as the output file How the command came to know of the destination file name as the command is sending output to standard file. (3 Replies)
Discussion started by: ravisingh
3 Replies

3. Shell Programming and Scripting

Displaying log file pattern output in tabular form output

Hi All, I have result log file which looks like this (below): from the content need to consolidate the result and put it in tabular form 1). Intercomponents Checking Passed: All Server are passed. ====================================================================== 2). OS version Checking... (9 Replies)
Discussion started by: Optimus81
9 Replies

4. Shell Programming and Scripting

script to mail monitoring output if required or redirect output to log file

Below script perfectly works, giving below mail output. BUT, I want to make the script mail only if there are any D-Defined/T-Transition/B-Broken State WPARs and also to copy the output generated during monitoring to a temporary log file, which gets cleaned up every week. Need suggestions. ... (4 Replies)
Discussion started by: aix_admin_007
4 Replies

5. Shell Programming and Scripting

Awk script to run a sql and print the output to an output file

Hi All, I have around 900 Select Sql's which I would like to run in an awk script and print the output of those sql's in an txt file. Can you anyone pls let me know how do I do it and execute the awk script? Thanks. (4 Replies)
Discussion started by: adept
4 Replies

6. Shell Programming and Scripting

awk: round output or delimit output of arithmatic string

I have a file with the following content. > cat /tmp/internetusage.txt 6709.296322 30000 2/7/2010 0.00I am using the following awk command to calculate a percentage from field 1 and 2 from the file. awk '{ print $1/$2*100 }' /tmp/internetusage.txt This outputs the value "22.3643" as a... (1 Reply)
Discussion started by: jelloir
1 Replies

7. Shell Programming and Scripting

Converting line output to column based output

Hi Guys, I am trying to convert a file which has a row based output to a column based output. My original file looks like this: 1 2 3 4 5 6 1 2 3 1 2 3 (8 Replies)
Discussion started by: npatwardhan
8 Replies

8. Shell Programming and Scripting

top output for six processes with the same name, output changed from column to row

Hi, I have a system under test, and I use a script that does a ps. The output, is in the following format, it's basically the timestamp, followed by the rss and vsize. 09:03:57 68404 183656 68312 181944 69860 217360 67536 182564 69072 183172 69032 199276 09:04:27 68752 183292 70000 189020... (5 Replies)
Discussion started by: Bloke
5 Replies

9. Shell Programming and Scripting

Expect - Interact output hangs when large output

Hello, I have a simple expect script I use to ssh to a workstation. I then pass control over to the user with interact. This script works fine on my HP and Mac, but on my Linux Desktop, I get a problem where the terminal hangs when ever I execute a command in the interact session that requires a... (0 Replies)
Discussion started by: natedog
0 Replies

10. Shell Programming and Scripting

how to make a line BLINKING in output and also how to increase font size in output

how to make a line BLINKING in output and also how to increase font size in output suppose in run a.sh script inside echo "hello world " i want that this should blink in the output and also the font size of hello world should be big .. could you please help me out in this (3 Replies)
Discussion started by: mail2sant
3 Replies
Login or Register to Ask a Question