Linux - Software This forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum. |
Notices |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
|
|
09-19-2005, 08:01 AM
|
#1
|
LQ Newbie
Registered: Sep 2005
Posts: 26
Rep:
|
File reading line by line and compare
Hi, I am quite confused here trying to implement a scenerio in bash where I have to read a file line by line and to search that line in from another file. Basically I want to compare two files, two files as seperate inputs read each line from src_file and try to search that line in from dst_file. Case sensativity is not a problem. We can use grep -i <..> anyway, if a match is found it displays line blah = found else not found. Each line from src_file should be parsed till EOF on dst_file.
If anyone can help me out in bash, I would really appreciate.
Goni
|
|
|
09-19-2005, 11:00 AM
|
#2
|
Senior Member
Registered: Oct 2003
Posts: 3,057
Rep:
|
Are you talking about something like diff?
diff src_file dst_file
|
|
|
09-19-2005, 11:05 AM
|
#3
|
LQ Newbie
Registered: Sep 2005
Posts: 26
Original Poster
Rep:
|
To some extent yes, diff works but I can't parse its output. Infact I am doing this to automate some router audits for a set of commands in my SOP which may or maynot be present in the router. The I got the router current config file in here and the SOP in the other file, just want to see the commands in SOP are present in router config or not. That all.
Goni
|
|
|
09-20-2005, 02:10 AM
|
#4
|
LQ Newbie
Registered: Sep 2005
Posts: 26
Original Poster
Rep:
|
no replies ... anyone ??
|
|
|
09-20-2005, 02:15 AM
|
#5
|
Senior Member
Registered: May 2004
Location: Hilliard, Ohio, USA
Distribution: Slackware, Kubuntu
Posts: 1,851
Rep:
|
Is there any reason you can't just do this:
Code:
for line in `cat src_file`; do grep -i $line dst_file; done
And BTW: Please wait a full 24 hours before bumping your thread in accordance with the LQ Rules.
Last edited by scuzzman; 09-20-2005 at 02:19 AM.
|
|
|
09-20-2005, 02:48 AM
|
#6
|
LQ Newbie
Registered: Sep 2005
Posts: 26
Original Poster
Rep:
|
I can do that but you see clearly it shows, for each line cat file, show the match. Means, if even a single match is from src_file, it will loop till the EOF of src_file. And the list goes on for multiple matches.
Sorry about the bumping, infact I was expecting replies a bit quicker but anyway, I'll try to follow the rules .. .. thankx
Goni
|
|
|
09-20-2005, 02:52 AM
|
#7
|
Senior Member
Registered: May 2004
Location: Hilliard, Ohio, USA
Distribution: Slackware, Kubuntu
Posts: 1,851
Rep:
|
Do you not want it to go until EOF of src_file? By this I mean, do you want it to stop the first time it finds a match?
|
|
|
09-20-2005, 03:03 AM
|
#8
|
LQ Newbie
Registered: Sep 2005
Posts: 26
Original Poster
Rep:
|
nop, I want it for ALL possible matches in src_file (compared in from dst_file) till EOF.
|
|
|
09-20-2005, 03:08 AM
|
#9
|
Senior Member
Registered: May 2004
Location: Hilliard, Ohio, USA
Distribution: Slackware, Kubuntu
Posts: 1,851
Rep:
|
That script I gave you should do that. An example may help. Let's assume you have 2 files: src_file and dst_file.
Contents of src_file:
Code:
orange
apple
kiwi
grapefruit
That script will get the first item in src_file ('orange' in this case) and compare it to every line in dst_file and display any matches. It will then move on to the second, third, etc doing the same.
What that is saying, essentially, is this:
Take each item from 'cat src_file' and store it in $line. Then, compare this to the entire contents of dst_file, line for line. Then, move onto the next line in src_file.
Last edited by scuzzman; 09-20-2005 at 03:11 AM.
|
|
|
09-20-2005, 03:13 AM
|
#10
|
LQ Newbie
Registered: Sep 2005
Posts: 26
Original Poster
Rep:
|
Logically you are correct but the script ain't doing so. I got 1 matche in both files, total 5 lines in src_file and the script is showing me the match 5 times. As you said, is should move on but its not doing so. BTW: I am prety sure the messy output does not have to do anything weather if I run it on command or script?
|
|
|
09-20-2005, 03:41 AM
|
#11
|
Member
Registered: Jun 2005
Location: q3dm7
Distribution: Mandriva 2010.0 x86_64
Posts: 338
Rep:
|
src_file contains duplicate lines? Remove them and try again:
Code:
cat src_file | sort | uniq > src_file_2
for line in `cat src_file_2`; do grep -i $line dst_file; done
Last edited by Snowbat; 09-20-2005 at 03:43 AM.
|
|
|
09-20-2005, 05:28 AM
|
#12
|
Senior Member
Registered: May 2004
Location: Hilliard, Ohio, USA
Distribution: Slackware, Kubuntu
Posts: 1,851
Rep:
|
Quote:
Originally posted by Snowbat
src_file contains duplicate lines? Remove them and try again:
Code:
cat src_file | sort | uniq > src_file_2
for line in `cat src_file_2`; do grep -i $line dst_file; done
|
You can actually eliminate a full step by doing this:
Code:
for line in `cat src_file | sort | uniq`; do grep -i $line dst_file; done
|
|
|
09-20-2005, 05:34 AM
|
#13
|
LQ Newbie
Registered: Sep 2005
Posts: 26
Original Poster
Rep:
|
No, src_file does not contains any duplicate, not atleast at the moment. There are just 5 lines,
Line1
This is lane2
Mismatch3
Someone here4
and this is line 5
Just like this, and dst_file contains some other different commands/lines but one or more than one from src_file for example "This is lane2". When I run the script, I get the output correct but it shows me 5 lines of the same output. Says "This is lane2"
What will make difference sorting out the file?
Last edited by Goni; 09-20-2005 at 05:37 AM.
|
|
|
09-20-2005, 09:29 PM
|
#14
|
Member
Registered: Jun 2005
Location: q3dm7
Distribution: Mandriva 2010.0 x86_64
Posts: 338
Rep:
|
So dst_file contains (or can contain) duplicates? You can get grep to stop after the first matching line:
Code:
for line in `cat src_file`; do grep -i -m 1 $line dst_file; done
Quote:
Originally posted by scuzzman
You can actually eliminate a full step by doing this:
Code:
for line in `cat src_file | sort | uniq`; do grep -i $line dst_file; done
|
Good point, though it will sort and uniq the complete file for every line... potentially slower for a large file?
|
|
|
09-21-2005, 12:24 AM
|
#15
|
Senior Member
Registered: May 2004
Location: Hilliard, Ohio, USA
Distribution: Slackware, Kubuntu
Posts: 1,851
Rep:
|
Quote:
Good point, though it will sort and uniq the complete file for every line...
|
It shouldn't. It's taking every line of 'cat src_file | sort | uniq' then running the loop on that, not the original file. Once it cat's sort's and uniq's the file, it forgets about it.
|
|
|
All times are GMT -5. The time now is 11:29 AM.
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|