grep in a loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting grep in a loop
# 1  
Old 03-28-2005
grep in a loop

Hi ,

I am trying a script which takes user input userid . I am stuck how to check whether that is a valid user id or not in the audit log files. My code is :

cd $CCP_AUDIT
cat * > /export/home/$USR/l***/files
echo "UserId:\c"
read UserId

#Date Function
echo "DATE [YYYY-MM-DD] : \c"
read xxx

I need help in putting this in a loop:

grep $xxx /export/home/$USR/lalitha/files |grep -v Created |grep -v Rejecte
d | grep -i $UserId | Mail -s "Transactions for $UserId" ***@***.com
~
Thanks,
Gundu
# 2  
Old 03-28-2005
With all the following, YM,aa,MV.

If I understand your problem correctly, you are trying to find all the log entries on a given date for a given user, then send an email to someone (probably yourself) to match all the transactions except Create and Reject.

You're asking specifically about putting the "grep" pipeline in a loop. This is not an especially big problem. Do you want to loop based on entering different user names? Different dates? Both? This simplest method is something like this (using /bin/sh):

Code:
while true; do
    read UserId
    read xxx
    grep [as you originally posted it]
done

(You probably want to put your prompts in as well --- this is just to show the general method.)

Then when you've run the program and for all the dates and userids, just hit control-C to break out of the loop.

More comments follow in another post.
# 3  
Old 03-28-2005
Thanks,

I like the way it is giving me option , but if the userid is not there then i need to break out saying userid doesnot exist, how to do that??

Thanks,
Gundu
# 4  
Old 03-28-2005
cat-ting to a temporary file

Your 'cat * > tempfile' is a classic UUOC (useless use of cat). There's nothing wrong with making '*' (without the apostrophes so it gets expanded) the "argument" to the first command in your pipeline.

Next, when you have four greps in a pipeline, you should consider using something like awk:

Code:
awk "/$xxx/ && /$UserId/ && !/Created/ && !/Rejected/" * | Mail ...

Notice the "double quotes" around the awk script are not 'apostrophes' --- you need your variables to be expanded. Of course, If you need a "$" in your search pattern, you're in for quoting experiments ...

(Added) I forgot to mention that this search is not case-insensitive, unlike your original grep.

Last edited by criglerj; 03-28-2005 at 04:48 PM..
# 5  
Old 03-28-2005
Quote:
Originally Posted by gundu
Thanks,

I like the way it is giving me option , but if the userid is not there then i need to break out saying userid doesnot exist, how to do that??

Thanks,
Gundu
Do you mean you want to break out of the loop if there is no log entry for a given user?
# 6  
Old 03-28-2005
yes, i take the user input and check to see it is there in the log file for that date and userid, if not exit with echo doesn't exist

Thanks,
Gundu
# 7  
Old 03-28-2005
Quote:
Originally Posted by gundu
yes, i take the user input and check to see it is there in the log file for that date and userid, if not exit with echo doesn't exist
I'm taking this to mean there are zero lines in the resulting output. (This is a different question than whether a given userid exists.)

Okay, this is where a temporary file begins to make sense: You need the same intermediate data for two different purposes. So change it this way:

Code:
grep ... > tempfile
if [ -s tempfile ]; then
    Mail ... < tempfile
else
    echo No such userid $UserId >&2
    break
fi
rm tempfile

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Ps ax with grep in loop

Hello, I have built the following script to check if processes supplied by the argument are running or not. #!/bin/bash PROCLIST=$1 PROCESS="0" ERROR_PROCS="" IFS='+' read -ra ADDR <<< "$PROCLIST" for PROC in "${ADDR}"; do if ; then PROCESS=1 ... (9 Replies)
Discussion started by: nms
9 Replies

2. UNIX for Beginners Questions & Answers

Grep command in a loop

Hello - I am running a script that is outputting to a log. Let call it output.log I would like to monitor that log until the line "Build Successful" is found. I think I would need to use the grep command. How would I do that in a loop? Thanks Marty (1 Reply)
Discussion started by: MSpeare
1 Replies

3. Homework & Coursework Questions

GREP loop

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: I need to search through the users home directories for keywords, display them. The code listed below will show... (7 Replies)
Discussion started by: jcllns1
7 Replies

4. Red Hat

using grep in a while loop

Hello everybody, I have been searching it, but it seems I am unable to find the correct information, that s why I am asking you guys, hoping somebody get an idea. Here is my problem : I want a script to loop until a string is identified in a log file. Here is the script : #!/bin/sh... (5 Replies)
Discussion started by: guyiom
5 Replies

5. Shell Programming and Scripting

Help on grep in a do while loop

So this is what I'm trying to do: I have a file called registry.txt which has a list of registry entries I want to search for. I have another file called inctrl.txt on which I want to perform the search on. Here's the example contents of registry.txt SOFTWARE\Microsoft\Security... (3 Replies)
Discussion started by: r4v3n
3 Replies

6. UNIX for Dummies Questions & Answers

grep sed and a loop

:wall: I have a requirement to search a log file that never rotates for certain values. If I find them I pipe them to a another file. To log file is constanyl being appened with new lines and never rotating Easy so far. The problem is I dont want to pipe out matches already seen before. ... (3 Replies)
Discussion started by: gunnahafta
3 Replies

7. Shell Programming and Scripting

Using grep within a while loop

Hi all, I have the below script to get input but i cannot get grep to work. input1.txt AAAAAAAAG input2.txt >gi|184009.1| LEAFY-like |AAAAAAAAGSGGGDHLPY However, when i use grep -f input1.txt input2.txt i cannot get any output matches (note that the match is underlined). Is it... (8 Replies)
Discussion started by: turkishvan
8 Replies

8. Shell Programming and Scripting

Help with grep inside an if loop

Hello All, I have been reading posts on here for a while, but this is my first post. I have a document in which many sentences appear, and I am piping it through an exterior script which will tag each word in the document with its part of speech (not part of my script, just background). The... (3 Replies)
Discussion started by: daf189
3 Replies

9. Shell Programming and Scripting

Grep commands in loop

Hi All, Reference to my previous post I need to compare all the lines in the file1 with file2 for this condition if file1 {$3,$5} ==file2 {$3,$5} then grep file2{$1}latest date. need output in file3 10/04/2008 09/04/2008 09/04/2008 08/04/2008 can anyone suggest me Thanks... (0 Replies)
Discussion started by: karthikn7974
0 Replies

10. UNIX for Dummies Questions & Answers

grep -v while loop

alist contain: a b c d e blist contain: a b c the code: #!/usr/bin/ksh cat blist | while read line do grep -V "$line" alist > data done (8 Replies)
Discussion started by: bobo
8 Replies
Login or Register to Ask a Question