Help Me - How to grep in multiple servers


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Help Me - How to grep in multiple servers
# 8  
Old 06-24-2009
Well, the one-liner that I wrote before it's pretty close to what you want.

I shall explain it in more detail:

for server in [ mumbai bangalore chennai delhi hyderabad other-hostnames ]; do echo $server; ssh $server zcat /path/to/voter.gz | grep -l "keyword"; done

The
Code:
for server in [ mumbai bangalore chennai delhi hyderabad other-hostnames ]

executes the command following the reserved where "do" for all the hostnames in the list between square brackets ([]).

The
Code:
echo $server

just prints out the hostname in stdout for a more clear output trace.

The
Code:
ssh $server zcat /path/to/voter.gz | grep -l "keyword"

does this: connect to $server defined by the for loop and do a zcat on the file. This prints to stdout all the contents of the compressed files. Immediately after that pipe (|) the output to a grep command that will search for the keyword. The "-l" argument will show only the name of the file if the keyword is found. If you omit that, you'll get the actual text line of the keyword.

If the user in your workstation is not the same as in the servers you should replace ssh $server with ssh user-name@$server, where user-name is the login in the servers.
On the other hand, if you have different logins for your servers, I suggest replacing [ mumbai bangalore chennai delhi hyderabad other-hostnames ] with [ user@mumbai user@bangalore user@chennai user@delhi user@hyderabad user@other-hostnames ]. Each of the user for each of the servers could be completely different. Example: root@mumbai prasad@chennai user2345@delhi, etc.

Using "for" you'll be searching through the servers one at a time. To bypass this, you could execute all the ssh commands in background logging the output to files and then look for the results in those files.

for server in [ mumbai bangalore chennai delhi hyderabad other-hostnames ]; do echo $server; ssh $server zcat /path/to/voter.gz | grep -l "keyword" & done

Note the ampersand replacing the last semicolon.

You can safely put this on a script that would look something like this:

Code:
#!/bin/bash

for server in [ mumbai bangalore chennai delhi hyderabad other-hostnames ]; do echo $server; ssh $server zcat /path/to/voter.gz | grep -l "$1" & done

and then, when you invoke the script you should do it like this:

./your-script.sh keyword

I do realize something else: if you have multiple compressed files to search for the faster way would be to use a find command and then execute the grep. The line should be something like this:

for server in [ mumbai bangalore chennai delhi hyderabad other-hostnames ]; do echo $server; ssh $server "find /path/to/file/*.gz -exec zcat {} \; | grep -l "$1"" & done


I actually don't have a *nix machine to test this out. I'm sure some of the double quotes could be wrong, so you should experiment yourself.
If you have any question feel free to ask but take in consideration the latter (you have to try it yourself!).

Good luck,

Leandro.

---------- Post updated at 11:29 AM ---------- Previous update was at 11:11 AM ----------

Quote:
Originally Posted by otheus
oh right. well, given that he's got .gz file, he should expect to find "zgrep" working just fine.
Yep! If he has that command installed in all servers, it'll do just fine. In fact, it would be recommended instead of "zcat | grep".

Last edited by l_vbosch; 06-24-2009 at 10:26 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to apply the update statement in multiple servers on multiple dbs at a time .?

Hi , Can any please help the below requirement on all multiple servers and multiple dbs. update configuration set value='yes' ;1) the above statement apply on 31 Databases at a time on different Ip address eg : 10.104.1.12 (unix ip address ) the above ip box contains 4 db's eg : db... (2 Replies)
Discussion started by: venkat918
2 Replies

2. UNIX for Beginners Questions & Answers

ssh multiple servers

Hi folks. I'm pretty new to unix, while I'm learning a lot I'm finding bash scripting quite confusing. Im sure it's not really, my head just hasn't clicked with it. Anyway, I need a script to loop the ip addresses stored in a file and run a "pgrep <process>" and return the pid or some... (2 Replies)
Discussion started by: MuntyScrunt
2 Replies

3. UNIX for Advanced & Expert Users

Help with credentials when using Grep across multiple servers

Hello all, I need some help with a script I have been working on. I was wanting to know if it is possible to add authentication to it for each server it runs across? The credentials are all the same on each server. This is what I am using so far and it seems to work. I am trying to avoid... (3 Replies)
Discussion started by: Smorgen
3 Replies

4. Shell Programming and Scripting

Grep from multiple patterns multiple file multiple output

Hi, I want to grep multiple patterns from multiple files and save to multiple outputs. As of now its outputting all to the same file when I use this command. Input : 108 files to check for 390 patterns to check for. output I need to 108 files with the searched patterns. Xargs -I {} grep... (3 Replies)
Discussion started by: Diya123
3 Replies

5. Shell Programming and Scripting

Checking running process status using "grep" on multiple servers in load sharing system.

Suppose i have 3 different servers say x,y and z. Im running some process say ABC and 40 instances for the same is being created. In load sharing suppose on server x, 20 instances are running server y, 10 instances are running server z, 10 instances are running. While checking the... (1 Reply)
Discussion started by: ankitknit
1 Replies

6. Shell Programming and Scripting

Deploying Cronjob to multiple servers

I figure that this is a shell scripting issue so I'll post here. I'm attempting to deploy a cronjob to a variety of servers, some 200-odd, of all walks of life. Mostly AIX, but some Solaris, some HP-UX, some Linux (of varying distributions), etc. I initially thought about utilizing a mass... (2 Replies)
Discussion started by: Magus Zeal
2 Replies

7. UNIX for Advanced & Expert Users

grep for a line in a file on multiple unix servers

Hi, I need to grep(look) for a line in filename named /tmp/Test on all 90 unix servers. Without logging to each servers manually and grep'ing for the line, is there a way to pull this info in output file thru' the ksh/sh/bash script. Can someone pl. help to create this script for me? Ex.... (3 Replies)
Discussion started by: Mike1234
3 Replies

8. Shell Programming and Scripting

rsh to change multiple ip in multiple servers?

good day. i jsut wanted to know what is the best script or the best way changing a lot of Ip's in all servers. Do you have any idea? im using awk to change IP,what if, you have lots of servers. You need to change it one by one? It will take time to change it manually. (2 Replies)
Discussion started by: kenshinhimura
2 Replies

9. Shell Programming and Scripting

login into multiple servers thru script...

I need to login into multiple servers thru a script run couple commands and run find command as root. I only have ssh access to the servers as a user than I can "su" to root. If you have a similar script please post it. Also if you can suggest commands that I should consider please let me know. ... (1 Reply)
Discussion started by: avcert1998
1 Replies

10. Shell Programming and Scripting

ftp to multiple servers

Hi folks. I am writing a ksh ftp script. The problem is, I need to transfer the files to several different servers. Is there a way to close a connection and move on to the next in one script or do I need to write a separate script for each one? Thanks, kristy (2 Replies)
Discussion started by: kristy
2 Replies
Login or Register to Ask a Question