Solved

String search in multiple gziped files

Posted on 2004-10-14
7
1,133 Views
Last Modified: 2012-06-21
I looked through the previous solutions, but did not find this specific anwer.

When I grep for a string in a list of regular files, it shows what file the string is in when it lists the occurances of the string.

I realize to do a string search in a directory of gzipped files, I can

gzcat * | grep -i Error

But, this only shows the occurance of the string and does not show which files the string occurs in.  So, I have to do the search manually against each file in the directory.  What do I do to have the output of  " gzcat * | grep -i Error "  show which files it finds the string.  Thanks for your help!

0
Comment
Question by:theoradically
7 Comments
 
LVL 14

Accepted Solution

by:
chris_calabrese earned 25 total points
ID: 12311907
You want something along the lines of

ls *.gz | while read file
do  gzcat "$file" | grep -i Error | while read line
      do echo "$file: $line"
      done
done
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 12312025
zgrep
0
 
LVL 48

Assisted Solution

by:Tintin
Tintin earned 100 total points
ID: 12312137
or possibly gzgrep depending on what Unix flavour you are on.
0
Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

 
LVL 2

Expert Comment

by:stokesj56
ID: 12324823
An alternate that will print the file name above the lines that match:

echo *.gz | while read FN
do
    echo "${FN}:"
    gzcat "$FN" | grep -i Error
    echo ""
done

This will print every file name. If you want to only see the file names that contain the search then do something like this:

echo *.gz | while read FN
do
    gzcat "$FN" | grep -q Error
    if [ $? -eq 0 ]
    then
        echo "${FN}:"
        gzcat "$FN" | grep -i Error
        echo ""
    fi
done

This will be a little slower because it does 2 greps.
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 12331591
re-enventing the wheel :-(
if there's a zcat, there's zgrep too
0
 

Author Comment

by:theoradically
ID: 12340105
gzgrep is what I was looking for - thanks tintin
gzgrep -i Error * - gives the filename and occurance of the string within it


Chris - your script worked , but was a little more than I was looking for


BYW,

when I do      which zcat  -   I get ... /bin/zcat
when I do      which zgrep -  I get    -   no zgrep in .....

Thanks for your input
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 12340650
if the name is zgrep or gzgrep depends on your installation, rpm, make, whatever ...
anyway, you found what you need
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Problem Imaging Computers With Clonezilla 2 90
Unix / Linux grid computing 5 156
Ubuntu install gnome-session-fallback is failing 4 110
Java core in Solaris 10 1 281
Installing FreeBSD… FreeBSD is a darling of an operating system. The stability and usability make it a clear choice for servers and desktops (for the cunning). Savvy?  The Ports collection makes available every popular FOSS application and packag…
I have been running these systems for a few years now and I am just very happy with them.   I just wanted to share the manual that I have created for upgrades and other things.  Oooh yes! FreeBSD makes me happy (as a server), no maintenance and I al…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.

785 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question