Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place! |
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.
|
 |
05-07-2004, 09:49 AM
|
#1
|
Member
Registered: Aug 2003
Location: London, UK
Distribution: Debian and Fedora for play and RHEL + Solaris for work
Posts: 172
Rep:
|
Using diff to compare file with common lines, but at different line numbers
Hi,
I wouldn't normally ask this type of question, but I've had a good look on google and can't find the answer, or any decent examples to get me started!
I'm trying to analyse some files containing a few thousand lines of sql commands each. Both of them are used to create a database with the same structure, except one has data in and the other only has the schema. I want to be able to compare them, so that I can output the extra lines of code used to insert the data into the database. From this I hope to replace it with my own data.
I'm aware that I can do this with the diff tool, but can't figure out which options are needed, really I just want an example, can anyone help? This is what I've tried so far:
diff -wbi kernel/setup/packages/blog/sql/mysql/blog.sql kernel/sql/mysql/cleandata.sql > out
and
diff -wbi kernel/sql/mysql/cleandata.sql kernel/setup/packages/blog/sql/mysql/blog.sql > out
neither give me the right results. I think this is something to do with the common lines not necessarily appearing on the same line numbers in each file.
Thanks in advance for any help!
Regards,
James
Last edited by jimieee; 05-07-2004 at 09:51 AM.
|
|
|
05-09-2004, 04:03 AM
|
#2
|
LQ Guru
Registered: Mar 2002
Location: Salt Lake City, UT - USA
Distribution: Gentoo ; LFS ; Kubuntu ; CentOS ; Raspbian
Posts: 12,613
Rep:
|
Having been a day or 2, I'll suggest using vimdiff instead of diff alone. It's a lot more elegant, and I think will give you the results you are looking for, or at least, closer to it.
Another option:
If the data is simply in a different file, and you want to "truncate" it to the bottom of the other file, you can cat the first file into the second:
cat /home/whatever/file1 >> /home/whatever/file2
Cool
|
|
|
05-10-2004, 04:24 AM
|
#3
|
Member
Registered: Aug 2003
Location: London, UK
Distribution: Debian and Fedora for play and RHEL + Solaris for work
Posts: 172
Original Poster
Rep:
|
Hmmm, had a quick go and it seems a lot nicer to user than diff. Need to read some docs to figure it out, but it appears to "know" what I want
Thanks!
~James~
|
|
|
05-10-2004, 07:26 AM
|
#4
|
Member
Registered: Aug 2003
Location: London, UK
Distribution: Debian and Fedora for play and RHEL + Solaris for work
Posts: 172
Original Poster
Rep:
|
In the end these tools didn't do exactly what I wanted them to do. I started to write a script, which seems to work, but doesn't like the long lines of text (sed doesn't that is) that I ended up dealing with. All this became too timeconsuming and I was starting to lose track of my objectives here, so I'm changing tactics. Here's my script for anyone interested:
Code:
#!/bin/bash
# A quick script to compare lines in two files a just retrieve the ones that
# are different (Delete CLEAN line matches when they appear in DIRTY, but
# output to OUTPUT).
CLEAN="cleandata.sql"
DIRTY="blog.sql"
OUTPUT="output.sql"
# Get number of lines in CLEAN
CLEAN_LINE_NUM=`wc -l $CLEAN`
# Argh! Get rid of the text that tells you the file you queried!
CLEAN_LINE_NUM=`echo $CLEAN_LINE_NUM | sed "s/$CLEAN//"`
# Copy DIRTY TO OUTPUT, because we don't want to overwrite our souces
cat $DIRTY > $OUTPUT
# For each line remove check to see if it exists in DIRTY,
# if it does delete it!
i=0
temp_input=`cat $DIRTY`
while [ $i -le $CLEAN_LINE_NUM ]
do
# Find out current line for CLEAN
line=`sed -n -e "$i"p < $CLEAN`
# Delete this line from OUPUT if it exists in DIRTY
sed -e "/$line/d" $temp_input > $OUTPUT
temp_input=`cat $OUPUT`
# Increment loop count variable
echo "`expr $i + 1` lines completed"
i=`expr $i + 1`
done
|
|
|
All times are GMT -5. The time now is 05:24 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
|
|