Find and Grep


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find and Grep
# 1  
Old 07-29-2014
Find and Grep

Is it possible with find and Grep to search files under a directory and display only files that have multiple occurrence of a string (In AIX)? Anybody has an example code? If not what are the other options?

Thanks in advance.
# 2  
Old 07-29-2014
Hi, let me make sure I understand your question?
You just want to find files that have the word aix in them?
# 3  
Old 07-29-2014
String I want to find is "not found".. If "not found" string found twice in a file give me the file name.. What I meant was OS is AIX.
# 4  
Old 07-29-2014
Not sure this works in AIX, but try
Code:
awk 'FNR==1 {c=0} /not found/ {++c} c==2 {print FILENAME; ++c}' *

# 5  
Old 07-30-2014
Code:
Cd {directory path}
Ls -ltr >> test.txt
Cat test.txt | awk -F" " '{print $9}| while read fl
Count=`Grep  "not found" ${fl} | wc -l`
If [ ${Count}  -eq  2   ]
Then
Echo ${fl} having "not found" string ${Count} times
fi
done

---------- Post updated at 06:23 PM ---------- Previous update was at 06:23 PM ----------

The above script will help you
Moderator's Comments:
Mod Comment Code tags for code, please. [code] stuff [/code]

Last edited by Corona688; 07-30-2014 at 04:39 PM..
# 6  
Old 07-30-2014
Commands in UNIX are case-sensitive, you can't just capitalize random things. Also, awk is missing a quote.

Quote:
Originally Posted by bharat1211
Code:
cd {directory path}
ls -ltr >> test.txt
cat test.txt | awk -F" " '{print $9}'| while read fl
Count=`grep  "not found" ${fl} | wc -l`
if [ ${Count}  -eq  2   ]
then
Echo ${fl} having "not found" string ${Count} times
fi
done

Also, that can be simplified a lot...
1) awk does not need cat's help to read a file.
2) awk's separator defaults to space, -F" " is redundant.
3) grep can count all by itself, via -c.
4) You don't need ls and awk to loop through a directory.
5) You especially don't need to ls -l -t then just throw away everything -l -t does for you.

ls -r -l -t | awk '{ print $9 }' | ... simplifies to ls -r | ... See man ls to learn what these options do.

6) If test.txt already existed, you'd be adding to it instead of replacing it, ending up with more filenames than you expected. Use > instead of >> to overwrite.

7) You don't need a temporary file. You can pipe into a loop as easily as anything else -- in fact you do so already, but didn't join the two.

8) find is often better than ls -r. You can tell it to find only files, for example (which is what -type f means.)

9) You don't need to run grep 12 times for 12 files. It's quite capable of counting more than one file.

Since "echo a b c d e | xargs cat" is equivalent to "cat a b c d e", we can feed find's list of files into xargs grep to grep many files at once.

It will print lines like filename:2 which we can read directly, telling the shell to split on : (The -H forces grep to always print the filename)

10) You only check for two and exactly two matches. You'd miss a file which had three. Try -ge for "greater than or equal to".

Code:
find /path/to/folder -type f | xargs grep -Hc "not found" | while IFS=":" read FILE C
do
        [ "$C" -ge 2 ] && echo "$FILE contains 'not found' $C times"
done


Last edited by Corona688; 07-30-2014 at 04:56 PM..
# 7  
Old 07-30-2014
I don't think -H works that way in AIX it has something to do with the -r and -R options and symbolic links.

We could "trick" grep into printing the filename by giving it /dev/null first:

Code:
find /path/to/folder -type f | xargs grep -c "not found" /dev/null | while IFS=":" read FILE C
do
        [ "$C" -ge 2 ] && echo "$FILE contains 'not found' $C times"
done


Last edited by Chubler_XL; 07-30-2014 at 06:44 PM..
This User Gave Thanks to Chubler_XL For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Using grep in find

Hi, On AIX, We have several moveplan.xml files in different folders. I run: find /u0/appl_top/ -name moveplan.xml -exec grep -i Passphrase {} \; And it returns <name>Custom Identity Keystore Passphrase File</name> <name>Custom Trust Keystore Passphrase File</name> ... (4 Replies)
Discussion started by: big123456
4 Replies

2. UNIX for Dummies Questions & Answers

find/xargs/*grep: find multi-line empty "try-catch" blocks - eg, missing ; not in a commented block

How can I recursively find all files in a directory and print out the file and first line number of any text blocks that match the below cases? This would seem to involve find, xargs, *grep, regex, etc. In summary, I want to find so-called empty "try-catch blocks" that do not contain code... (0 Replies)
Discussion started by: lifechamp
0 Replies

3. Shell Programming and Scripting

How to use grep & find command to find references to a particular file

Hi all , I'm new to unix I have a checked project , there exists a file called xxx.config . now my task is to find all the files in the checked out project which references to this xxx.config file. how do i use grep or find command . (2 Replies)
Discussion started by: Gangam
2 Replies

4. UNIX for Dummies Questions & Answers

grep or find ?

I have a file called 'test.txt' that contains alphanumeric charecters. The file contains the word 'SBE' followed by other alphabets many times. For example, the file will contain: SBE334GH and also will have SBE77Y8I. When i do grep 'SBE*' test.txt - it outputs the entire file. Can you... (5 Replies)
Discussion started by: DallasT
5 Replies

5. UNIX for Dummies Questions & Answers

Using find with a grep

:wall:Hello, Im having trouble using the find and grep combined into one command. I have the following: find filname* -mmin -60 grep "ERROR" filename I want to find the "ERROR" text in any file created in the last hour in the current directory. I dont know how to end the command. If I leave... (3 Replies)
Discussion started by: aispg8
3 Replies

6. Shell Programming and Scripting

Using Find w/ Grep?

Hey, I have a Find command like: find $searchDir -type f and this returns a list of files under the directory, which is all good, but, I want to filter that search for files that contain the string "people" I tried something like: find $searchDir -type f -exec grep "people" '{}'... (2 Replies)
Discussion started by: beefeater267
2 Replies

7. UNIX for Dummies Questions & Answers

find , grep

HI what is the difference between find and grep if I want to find all the files from different directories which contain "ORA" error, and the line number in each file which has ORA error should I use pipeline ? thanks James (3 Replies)
Discussion started by: james94538
3 Replies

8. UNIX for Dummies Questions & Answers

grep and find

Hey, I have a question about using grep and find together to locate all C programs in a directory containing certain words and open the vi editor with each file. I'm not sure how to do this in one command (as in one line). I know find has a "-exec" option that can call vi, but how do you combine... (1 Reply)
Discussion started by: MEllis5
1 Replies

9. Shell Programming and Scripting

find then grep

I have some patterns that I need to match with the content of several files and I'm having trouble to do it Here is what I tried already : ksh won't even execute this #!/bin/ksh path="/export/home/ipomwbas" pattern=$path"/flags" find . -name "*.properties" |\ while read file; do ... (7 Replies)
Discussion started by: flame_eagle
7 Replies

10. Programming

find and grep

Hi, I need to find out a particular pattern from a directory, for example say X. The X directory contains 10 c files, and it has subdirectory called Y, and Y has 20 c files within it. Now I have to find out the pattern only from parent directory X not from sub directory Y. I have... (4 Replies)
Discussion started by: sarwan
4 Replies
Login or Register to Ask a Question