Comparing two files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Comparing two files
# 1  
Old 05-07-2011
Comparing two files

I have tywo files as usual


file1.txt
$1 $2 $3 $4 $5 $6 $7 $8
Code:
1234567|iufgt|iuoy|iout|white |black |red        |90879
1234567|iufgt|iuoy|iout|green |pink  |blue       |90879
1234567|iufgt|iuoy|iout|orange|purple|magenta|90879
1234567|iufgt|iuoy|iout|yellow |violet|grey      |90879



we have to consider here $5 , $6 , $7 for our search




file2.txt

$1 $2 $3 $4 $5 $6
Code:
1234567|grey|iuoy|iout|iufgt|90879
1239877|magenta|iuoy|iout|iufgt|90879
1733267|blue|iuoy|iout|iufgt|90879
1232677|red|iuoy|iout|iufgt|90879
1239567|white|iuoy|iout|iufgt|90879
1238727|green|iuoy|iout|iufgt|90879
1237247|orange|iuoy|iout|iufgt|90879
1236397|yellow|iuoy|iout|iufgt|90879
1232947|pink|iuoy|iout|iufgt|90879
1230247|black|iuoy|iout|iufgt|90879
1234037|violet|iuoy|iout|iufgt|90879
1238037|purple|iuoy|iout|iufgt|90879
1237897||iuoy|iout|iufgt|90879
1238797||iuoy|iout|iufgt|90879
1239997||iuoy|iout|iufgt|90879

here we should take only $2 for comparison. As you can most of the $2 field records has value and some do not have value



Question:

I want to take the fields $5 , $6 , $7 from file 1 and compare it with $2 field from file 2. and the rsult should be like this

Code:
if $5 (file1) =$2 (file2) then replace $5 (file1) with $1 of (file2)
if $6 (file1) =$2 (file2) then replace $6 (file1) with $1 of (file2)
if $7 (file1) =$2 (file2) then replace $7 (file1) with $1 of (file2)

the final output will look like this

Actual file1.txt (before running the code)

$1 $2 $3 $4 $5 $6 $7 $8
Code:
1234567|iufgt|iuoy|iout|white |black |red    |90879
1234567|iufgt|iuoy|iout|green |pink  |blue   |90879
1234567|iufgt|iuoy|iout|orange|purple|magenta|90879
1234567|iufgt|iuoy|iout|yellow|violet|grey   |90879



FIle1.txt after running the above said condition


$1 $2 $3 $4 $5 $6 $7 $8
Code:
1234567|iufgt|iuoy|iout|1239567 |1230247 |1232677   |90879
1234567|iufgt|iuoy|iout|1238727 |1232947 |1733267   |90879
1234567|iufgt|iuoy|iout|1237247 |1238037 |1239877   |90879
1234567|iufgt|iuoy|iout|1236397 |1234037 |1234567   |90879


so the field $5 , $6 , $7 should get replaced from the matched valued of $1(file1)


Please advice how it can do done. if u can do it in join , awk or nawk it would be really helpfull.

Last edited by radoulov; 05-07-2011 at 05:07 AM.. Reason: Code tags, please!
# 2  
Old 05-07-2011
Code:
awk -F\| 'NR == FNR {
  map[$2] = $1 
  next
  }
{
  for (i = 4; ++i <=7;) {
    sub(/ *$/, x, $i)
    $i in map && $i = map[$i]
    }
  }
  42
  ' OFS=\| file2.txt file1.txt

# 3  
Old 05-07-2011
Thanks for the reply. Can you please explain your code...
# 4  
Old 05-09-2011
Code:
awk -F\| 'NR == FNR {                  # while reading the first non-empty input file
  map[$2] = $1                         # build an associative array named map indexed by $2, $1 as values 
  next                                 # skip the rest of the program 
  }
{
  for (i = 4; ++i <=7;) {              # while reading the rest of the input, for each field from 5 to 7 
    sub(/ *$/, x, $i)                  # trim any trailing spaces
    $i in map && $i = map[$i]          # if the column value is an index in the map array, set its value to map[$i]
    }
  }
  42                                   # print the (modified) records
  ' OFS=\| file2.txt file1.txt

# 5  
Old 05-09-2011
Quote:
42 # print the (modified) records
Hi radoulov, 42 - is this a key word in awk?

regards,
Ahamed
# 6  
Old 05-10-2011
Quote:
Originally Posted by ahamed101
Hi radoulov, 42 - is this a key word in awk?
No.

Each awk statement consists of a pattern with an associated action,
either the pattern or the action can be omitted, but not both.

Code:
pattern { action }

In this case - 42 - we have a single expression.
It matches when its value is nonzero (if a number) or non-null (if a string).
Basically, it could be any number different than 0 or any string different than "".

As far as the choice of 42 is concerned, see this Smilie.

P.S. By the way, Aharon Robbins, one of the GNU awk authors and current maintainer, defines
this as absolutely miserable programming practice.

Last edited by radoulov; 06-01-2011 at 06:13 AM..
This User Gave Thanks to radoulov For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

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
Login or Register to Ask a Question