Visit Our UNIX and Linux User Community


Comparing two files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Comparing two files
# 8  
Old 08-14-2013
that helped thanks

---------- Post updated at 12:25 PM ---------- Previous update was at 12:20 PM ----------

However ,
what if I want to retrieve each of the lines and put all the values in them in an associative array ?
eg-
Code:
"K","","1303","A  ","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

K
1303
A
0
0
0 .. etc

---------- Post updated at 12:26 PM ---------- Previous update was at 12:25 PM ----------

how to write a snippet for that ?

~thanks

Last edited by Scott; 08-14-2013 at 09:23 AM.. Reason: Please use code tags
# 9  
Old 08-14-2013
Do you want to print the exact difference? or the lines that are different?
# 10  
Old 08-14-2013
the difference as well
# 11  
Old 08-14-2013
The below will tell you if the files are different or not
Code:
cmp -s file1.txt file2.txt; echo $? | xargs -I var bash -c 'if [ var -gt 0 ];then echo "Files are different"; else echo "Files are the same";fi'

Computing the difference using only shell needs a little work. I think in going trough the files and compare lines from one file with the corresponding lines from the other.

And where you encounter differences to echo with different color or smth...but as i said i think this needs a little work...

---------- Post updated at 09:39 AM ---------- Previous update was at 07:11 AM ----------

Hi,
I came up with the following script :
Code:
#Date : 14.08.2013
#Author : Ionut Capitanu
#Purpose : Verify if 2 CSV files are different and show line by line differences
#Usage : ./cmp_files.sh <file1> <file2>

#Verify positional params
if [ $# -lt 2 ]; then
        echo "Not enough parameters, 2 files needed for comparison"
        echo "Usage : ./cmp_files.sh <file1> <file2>"
        exit 1
fi

#Get file names
FILE1=$1
FILE2=$2

#Verify that the files exist
if [[ ! -e $FILE1 ]]; then
        echo "File `pwd`/$FILE1 does not exist"
        exit 1
fi

if [[ ! -e $FILE2 ]]; then
        echo "File `pwd`/$FILE2 does not exist"
        exit 1
fi


#Colors
red="\e[0;31m"
NC="\e[0m"

#Verify if files are different
DIFF=`cmp -s $FILE1 $FILE2; echo $?`

if [[ "$DIFF" = 0 ]]; then
                echo "Files are not different. No need for comparison"
                exit 1
else
          #Loop through files and compare fields
          MAXLINE=0
          NRLINES_F1=`wc -l $FILE1 | cut -d" " -f1`
          NRLINES_F2=`wc -l $FILE2 | cut -d" " -f1`

          if [ $NRLINES_F1 -gt $NRLINES_F2 ]; then
                  MAXLINE=$NRLINES_F1
              else
                  MAXLINE=$NRLINES_F2
          fi

              for (( j=1;j<=MAXLINE;j++ ));  do
              if [[ `awk -F, -v j="$j" 'FNR == j {print $0}' $FILE1` != `awk -F, -v j="$j" 'FNR == j {print $0}' $FILE2` ]];then
                   #Find maximum number of fields between lines j of both files
                    MAX=0
                    if [[ `awk -F, -v j="$j" 'FNR == j {print NF}' $FILE1` -lt `awk -F, -v j="$j" 'FNR == j {print NF}' $FILE2` ]]; then
                            MAX=`awk -F, -v j="$j" 'FNR == j {print NF}' $FILE2`
                    else
                            MAX=`awk -F, -v j="$j" 'FNR == j {print NF}' $FILE1`
                    fi

                    #Echo line j from FILE1
                    echo `pwd`"/$FILE1,Line$j:" #>> result.file
                    awk -v j="$j" 'FNR == j {print $0}' $FILE1 #>> result.file

                    #Echo header for line j from FILE2
                    echo `pwd`"/$FILE2,Line$j:" #>> result.file

                    #Compute differences
                    for (( i=1;i<=MAX;i++ ));  do

                    #Echo line from FILE2 with different fields in red
               if [ "`awk -F, -v i="$i" -v j="$j" 'FNR == j {print $i}' $FILE1`" == "`awk -F, -v i="$i" -v j="$j" 'FNR == j {print $i}' $FILE2`" ]
                   then
                             echo -n `awk -F, -v i="$i" -v j="$j" 'FNR == j {print $i}' $FILE1`"," #>>result.file
                     else
                             echo -n -e "${red}`awk -F, -v i="$i" -v j="$j" 'FNR == j {print $i}' $FILE2`","${NC}" #>> result.file
                     fi
                     done
                  echo -e "\n"
              fi
               done
fi

#END

Hope this helps you. Feel free to modify it, modularize it maybe with functions or something, bring in some more logic to it, etc.

Test files :
Code:
file1.txt:
1,2,3,4,5,6,7,8,9,"G",F, T, D
1
4,5,5,

Code:
file2.txt:
T,2,3,4,0,6,7,8,ABC,"G",z, T, D,10,12
46,7,8,9,0,
4,5,5

Code:
Output:
/home/mind/tmp/file1.txt,Line1:
1,2,3,4,5,6,7,8,9,"G",F, T, D
/home/mind/tmp/file2.txt,Line1:
T,2,3,4,0,6,7,8,ABC,"G",z,T,D,10,12,

/home/mind/tmp/file1.txt,Line2:
1
/home/mind/tmp/file2.txt,Line2:
46,7,8,9,0,,

/home/mind/tmp/file1.txt,Line3:
4,5,5,
/home/mind/tmp/file2.txt,Line3:
4,5,5,,

/home/mind/tmp/file1.txt,Line4:
/home/mind/tmp/file2.txt,Line4:

The differences will be outlined in red.

EDIT : I modified it a little bit to output only different lines

Last edited by capitanui; 08-14-2013 at 11:57 AM.. Reason: Please use code tags

Previous Thread | Next Thread
Test Your Knowledge in Computers #565
Difficulty: Medium
The logical and operator is also called a conjunction.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Comparing two files and list the difference with common first line content of both files

I have two file as given below which shows the ACL permissions of each file. I need to compare the source file with target file and list down the difference as specified below in required output. Can someone help me on this ? Source File ************* # file: /local/test_1 # owner: own #... (4 Replies)
Discussion started by: sarathy_a35
4 Replies

2. Shell Programming and Scripting

Comparing files in a directory against an array of files

I hope I can explain this correctly. I am using Bash-4.2 for my shell. I have a group of file names held in an array. I want to compare the names in this array against the names of files currently present in a directory. If the file does not exist in the directory, that is not a problem.... (5 Replies)
Discussion started by: BudMan
5 Replies

3. Shell Programming and Scripting

Comparing the files

Hi Friends, I have file1.txt file2.txt I tried using the diff and comm but not getting the expected output.. I want where exactly the miss match occurs. probably the field. Sourcevalue|Targetvalue|Linenumber|field 29123975|2923975|3|1 Please help. (6 Replies)
Discussion started by: i150371485
6 Replies

4. Shell Programming and Scripting

Help with comparing two files

Hi all I have to compare two file this time one is P11223 x1124 x1145 t5678 e3456 z2345 another file P11223 x s (2 Replies)
Discussion started by: manigrover
2 Replies

5. UNIX for Advanced & Expert Users

How to find duplicates contents in a files by comparing other files?

Hi Guys , we have one directory ...in that directory all files will be set on each day.. files must have header ,contents ,footer.. i wants to compare the header,contents,footer ..if its same means display an error message as 'files contents same' (7 Replies)
Discussion started by: Venkatesh1
7 Replies

6. Shell Programming and Scripting

Comparing the matches in two files using awk when both files have their own field separators

I've two files with data like below: file1.txt: AAA,Apples,123 BBB,Bananas,124 CCC,Carrot,125 file2.txt: Store1|AAA|123|11 Store2|BBB|124|23 Store3|CCC|125|57 Store4|DDD|126|38 So,the field separator in file1.txt is a comma and in file2.txt,it is | Now,the output should be... (2 Replies)
Discussion started by: asyed
2 Replies

7. Shell Programming and Scripting

Need help comparing two files and deleting some things in those files!

So I have two files: File1 pictures.txt 1.1 1.3 dance.txt 1.2 1.4 treehouse.txt 1.3 1.5 File2 pictures.txt 1.5 ref2313 1.4 ref2345 1.3 ref5432 1.2 ref4244 dance.txt 1.6 ref2342 1.5 ref2352 1.4 ref0695 1.3 ref5738 1.2 ref4948 1.1 treehouse.txt 1.6 ref8573 1.5 ref3284 1.4 ref5838... (24 Replies)
Discussion started by: linuxkid
24 Replies

8. Shell Programming and Scripting

Need Help Comparing two Files

I really need help on creating a script that does the following: I have one file (File 1) with lines in the following format: Name.maf score1 score2 I have a second file (File 2) with lines in the following format: label start end Name What I need to do is compare File 1 and... (1 Reply)
Discussion started by: awknerd
1 Replies

9. Shell Programming and Scripting

Comparing files

I have a file called X, which contains the following: 10 100 200 300 I then have file Y, which containts the following: 10 200 500 800 I want to write a script that will compare the contents of Y with the contents of X and ONLY return values in Y that does not exist in X (output... (5 Replies)
Discussion started by: soliberus
5 Replies

10. UNIX for Advanced & Expert Users

comparing shadow files with real files

Hi I need to compare shadow file sizes with their real file counterparts. If the shadow file size differs form the realfile size then it must send a mail. My problem is that our system has over 1600 shadowfiles in different directories, with different names. the only consistancy is the .sh file... (4 Replies)
Discussion started by: terrym
4 Replies

Featured Tech Videos