Visit Our UNIX and Linux User Community


Compare two files and print the two lines with difference


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Compare two files and print the two lines with difference
# 1  
Old 06-20-2009
Compare two files and print the two lines with difference

I have two files like this:
#FILE 1
ABCD 4322 26485
JMTJ 5311 97248
XMPJ 4321 58978
#FILE 2
ABCD 4321 26485
JMTJ 5311 97248
XMPJ 4321 68978

What to do: Compare the two files and find those lines that doesn't match. And have a new file like this:
#FILE 3
"from file 1"
ABCD 4322 26485
XMPJ 4321 58978

"from file 2"
ABCD 4321 26485
XMPJ 4321 68978

many thanks!
# 2  
Old 06-20-2009
This should do it.
Code:
BEGIN { i=0; j=0 }
FNR == NR { a[i++]=$0; next }
{ 
    if (a[j] != $0) b[j]=1; else b[j]=0; 
    j++; 
}
END {
    print "from file 1"
    for (k=0; k < i; ++k) if (b[k]) print a[k]
    print "\nfrom file 2"
    for (k=0; k < j; ++k) if (b[k]) print a[k]
}

# 3  
Old 06-20-2009
Have a look at the "diff" command. The output format will not be exactly like you want it to be but close enough and the functionality you want is there.

I hope this helps.

bakunin
# 4  
Old 06-20-2009
Code:
{
echo "from file 1"; diff file1 file2 | awk '/^</ {sub( /< /, "", $0 ); print }'
echo "from file 2"; diff file1 file2 | awk '/^>/ {sub( /> /, "", $0 ); print }'
} > file3
 
Or just diff file1 file2

# 5  
Old 06-20-2009
Try this:

Code:
cat file1 file2 | sort | uniq -u > file3

ABCD 4321 26485
ABCD 4322 26485
XMPJ 4321 58978
XMPJ 4321 68978

Ps: If the output file needs to contain the text "from file ..." etc. please disregard this post.

Last edited by methyl; 06-20-2009 at 06:58 PM.. Reason: Qualified
# 6  
Old 06-20-2009
Hi.

If you have access to Linux, a recent package, moreutils, contains a number of clever utilities, among them is combine:
Code:
#!/usr/bin/env bash

# @(#) s1	Demonstrate combine from Linux package moreutils.

echo
set +o nounset
LC_ALL=C ; LANG=C ; export LC_ALL LANG
echo "Environment: LC_ALL = $LC_ALL, LANG = $LANG"
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version "=o" $(_eat $0 $1) combine
set -o nounset
echo

FILE1=data1
FILE2=data2

echo
echo " Data file $FILE1:"
cat $FILE1

echo
echo " Data file $FILE2:"
cat $FILE2

echo
echo " Results not in $FILE2:"
combine $FILE1 not $FILE2

echo
echo " Results not in $FILE1:"
combine $FILE2 not $FILE1

exit 0

Producing:
Code:
% ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0 
GNU bash 3.2.39
combine - ( /usr/bin/combine Jun 28 2008 )


 Data file data1:
ABCD 4322 26485
JMTJ 5311 97248
XMPJ 4321 58978

 Data file data2:
ABCD 4321 26485
JMTJ 5311 97248
XMPJ 4321 68978

 Results not in data2:
ABCD 4322 26485
XMPJ 4321 58978

 Results not in data1:
ABCD 4321 26485
XMPJ 4321 68978

Best wishes ... cheers, drl
# 7  
Old 06-21-2009
In comparing two files, does it need that the two files have the same number of lines?

Previous Thread | Next Thread
Test Your Knowledge in Computers #406
Difficulty: Medium
Cygwin was originally developed by Cygnus Solutions, which was later acquired by Microsoft.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Compare two variables and print the difference

compare two variables and print the difference i have two variables X1=rac1,rac2 Y1=rac2,rac3 output=rac1,rac3 Use code tags to wrap code fragments or data samples. (1 Reply)
Discussion started by: jhonnyrip
1 Replies

2. Shell Programming and Scripting

Compare two variables and print the difference

Hi PRIM_SEQ=`some sql code` and output of PRIM_SEQ is like below 120 130 STB_SEQ=`some sql code` and output of STB_SEQ is like below 115 110 i need to compare this two variables output ( decimal numbers) 1) What I want to do is to compare every number in the PRIM_SEQ with... (8 Replies)
Discussion started by: amar1208
8 Replies

3. Shell Programming and Scripting

Simple awk command to compare two files and print first difference

Hello, I have two text files, each with a single column, file 1: 124152970 123899868 123476854 54258288 123117283 file 2: 124152970 123899868 54258288 123117283 122108330 (5 Replies)
Discussion started by: LMHmedchem
5 Replies

4. Shell Programming and Scripting

Compare file1 for matching line in file2 and print the difference in matching lines

Hello, I have two files file 1 and file 2 each having result of a query on certain database tables and need to compare for Col1 in file1 with Col3 in file2, compare Col2 with Col4 and output the value of Col1 from File1 which is a) not present in Col3 of File2 b) value of Col2 is different from... (2 Replies)
Discussion started by: RasB15
2 Replies

5. Shell Programming and Scripting

Compare multiple files and print unique lines

Hi friends, I have multiple files. For now, let's say I have two of the following style cat 1.txt cat 2.txt output.txt Please note that my files are not sorted and in the output file I need another extra column that says the file from which it is coming. I have more than 100... (19 Replies)
Discussion started by: jacobs.smith
19 Replies

6. UNIX for Dummies Questions & Answers

Compare 2 files print the lines of file 2 that contain a string from file 1

Hello I am a new unix user, and I have a work related task to compare 2 files and print all of the lines in file 2 that contain a string from file 1 Note: the fields are in different columns in the files. I suspect the is a good use for awk? Thanks for your time & help File 1 123 232 W343... (6 Replies)
Discussion started by: KevinRidley
6 Replies

7. Shell Programming and Scripting

Compare two columns in two files and print the difference

one file . . importing table employee 119 . . importing table jobs 1 2nd file . . importing table employee 120 . . importing table jobs 1 and would like... (2 Replies)
Discussion started by: jhonnyrip
2 Replies

8. Shell Programming and Scripting

Compare selected columns from a file and print difference

I have learned file comparison from my previous post here. Then, it is comparing the whole line. Now, i have a new problem. I have two files with 3 columns separated with a "|". What i want to do is to compare the second and third column of file 1, and the second and third column of file 2. And... (4 Replies)
Discussion started by: kingpeejay
4 Replies

9. Shell Programming and Scripting

awk to compare lines of two files and print output on screen

hey guys, I have two files both with two columns, I have already created an awk code to ignore certain lines (e.g lines that start with 963) as they wou ld begin with a certain string, however, the rest I have added together and calculated the average. At the moment the code also displays... (3 Replies)
Discussion started by: chlfc
3 Replies

10. Shell Programming and Scripting

to compare two files and to print the difference

suppose one file P1168S P2150L P85L Q597R R1097C Another file P2150L P85L Q597R R1097C R1379C R1587K Then output shud be R1379C R1587K thanks (5 Replies)
Discussion started by: cdfd123
5 Replies

Featured Tech Videos