Unix Shell Scripting : Comparision of two files

 
Thread Tools Search this Thread
Special Forums UNIX and Linux Applications Unix Shell Scripting : Comparision of two files
# 1  
Old 08-27-2012
Question Unix Shell Scripting : Comparision of two files

Hi,
We need to compare a text file File1.txt and config file File2.txt in a way that it checks if the content of File1.txt exists between the range mentioned in File2.cfg.
The range here is the range between col1 and col2 of File2.cfg
If the content of File1.txt lies between the range of File2.cfg then output should display the count of col3 of File2.cfg in Outputfile.

For Example :
File1.txt
Code:
65005
65007
65006
27117
68700
68399

File2.cfg
Code:
col1        col2     col3
65005    65008    A
68399    68399    A
68700    68700    A
22980   22999     B
27109    27125    C

Output File :
Code:
col3  Count
A        5
B        0
C        1

Could anyone please help me to do the sameSmilie.

Thanks in Advance
CFA


Moderator's Comments:
Mod Comment Please use code tags next time for your code and data.

Last edited by zaxxon; 08-27-2012 at 08:50 AM.. Reason: code tags
# 2  
Old 08-27-2012
With awk:
Code:
awk 'FNR==NR{range[$1,$2]=$3;next}
{
for(i in range)
{
 c[range[i]]+=0
 split(i,r,SUBSEP)
 if($1>=r[1] && $1<=r[2])
  c[range[i]]++
}
}
END{
for(i in c)
print i,c[i]|"sort"}' file2 file1

These 2 Users Gave Thanks to elixir_sinari For This Post:
# 3  
Old 08-27-2012
Hi Elixir

Thanks a bunch for your prompt reply.

We tried this command but its providing the output as '0'.
Also the two files that we mentioned are in different paths.

Could you please helpSmilie.

Thanks in Advance
CFA
# 4  
Old 08-27-2012
Read what I wrote carefully. file2 is mentioned first. This is important.
Code:
cat file1
65005
65007
65006
27117
68700
68399

cat file2
65005 65008 A
68399 68399 A
68700 68700 A
22980 22999 B
27109 27125 C

awk 'FNR==NR{range[$1,$2]=$3;next}
> {
> for(i in range)
> {
>  c[range[i]]+=0
>  split(i,r,SUBSEP)
>  if($1>=r[1] && $1<=r[2])
>   c[range[i]]++
> }
> }
> END{
> for(i in c)
> print i,c[i]|"sort"}' file2 file1
A 5
B 0
C 1

If the 2 files reside in different directories:
Code:
awk '<program>' /path/to/file2 /path/to/file1

This User Gave Thanks to elixir_sinari For This Post:
# 5  
Old 08-27-2012
Thanks a bunch

Hi Elixir,

Thanks a lot for your help.

Now its working fineSmilie.
Would deem it a great favour if you could please explain how exactly the provided code works.

Thanks in Advance
CFASmilie
# 6  
Old 08-27-2012
In brief:
Code:
awk '
### THIS STORES THE RANGES FROM THE FIRST FILE ON THE COMMAND LINE (file2) ###
### IN AN ARRAY IN MEMORY. REQUIRED FOR LOOKUP LATER WHEN WE START READING ###
### file1.                                                                 ###
FNR==NR{range[$1,$2]=$3;next}
##############################################################################
{
### FOR EACH LINE FROM file1, THIS LOOPS THROUGH THE ARRAY STORED IN MEMORY###
### AND CHECKS IF THE LINE READ IS IN ANY OF THE RANGES. IF YES, THE COUNT ###
### OF THE RANGE NAME (A,B,C,D,ETC.) IS INCREMENTED BY ONE.                ###
for(i in range)
{
 c[range[i]]+=0
 split(i,r,SUBSEP)
 if($1>=r[1] && $1<=r[2])
  c[range[i]]++
}
###############################################################################
}
### THIS IS DONE AFTER READING THE 2 FILES COMPLETELY. THIS SIMPLY PRINTS   ###
### THE ARRAY INDEX (RANGE NAME) AND THE CORRESPONDING VALUE (COUNT). THE   ###
### OUTPUT IS PIPED TO THE SORT COMMAND TO GET THE OUTPUT DESIRED.          ###
END{
for(i in c)
print i,c[i]|"sort"}
################################################################################
' file2 file1

This User Gave Thanks to elixir_sinari For This Post:
# 7  
Old 08-27-2012
Computer Thanks again

Hi Elixir

Thanks a tonne...!!!! Appreciate your quick responseSmilie.
The explanation was very clearSmilie. Got a clear picture how the code is working.

Thanks and Regards,
CFASmilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Export Oracle multiple tables to multiple csv files using UNIX shell scripting

Hello All, just wanted to export multiple tables from oracle sql using unix shell script to csv file and the below code is exporting only the first table. Can you please suggest why? or any better idea? export FILE="/abc/autom/file/geo_JOB.csv" Export= `sqlplus -s dev01/password@dEV3... (16 Replies)
Discussion started by: Hope
16 Replies

2. Homework & Coursework Questions

UNIX shell scripting programming in files

Create 2 files in unix in 2 different directories, compare them and fetch common words between these 2 files. Print them on the screen and also redirect the output to your home directory in the below format: file 1 | file 2 line no: word 1 | line no: word 1 line no: word 2 | line no: word 2 line... (11 Replies)
Discussion started by: mounica bijjala
11 Replies

3. UNIX for Beginners Questions & Answers

UNIX Shell Scripting

Describe in short the word completion feature of the tcsh Completion works anywhere in the command line, not at just the end, for both commands and filenames. Type part of a word and hit the Tab key, and the shell replaces the incomplete word with the complete one in the input buffer. The... (1 Reply)
Discussion started by: Elena Lauren
1 Replies

4. Shell Programming and Scripting

Comparing Select Columns from two CSV files in UNIX and create a third file based on comparision

Hi , I want to compare first 3 columns of File A and File B and create a new file File C which will have all rows from File B and will include rows that are present in File A and not in File B based on First 3 column comparison. Thanks in advance for your help. File A A,B,C,45,46... (2 Replies)
Discussion started by: ady_koolz
2 Replies

5. UNIX for Dummies Questions & Answers

Unix Shell Scripting( Calling from Unix to PLSQL)

Hello Experts, I have the following questions to be discussed here at this esteemed discussion forum. I have two Excel sheets which contain Unix Commands llike creating directory the structure/ftp/Copy/Zip etc to basically create an environment. I need help in understanding some of... (1 Reply)
Discussion started by: faizsaadq
1 Replies

6. Shell Programming and Scripting

Unix shell scripting

Hi All, I have one file called date1.txt and it contains dates like 130112 140112 150112 160112 170112 180112 190112 201012 so i need a script to read this file line by line and find out the day of each date and assign this value in one variable. And validate Weekday="Mon" then... (4 Replies)
Discussion started by: vichuelaa
4 Replies

7. Shell Programming and Scripting

Comparision of two huge unix files - Reconcilation

Hi, I have two huge file; each one has approximately 150000 lines. I need to compare both of them and store the unmatched lines into a different file. I have searched for everything in google but did not get solution. Files are: File1 NRALBAMINDB20003726 NRALBAMINDB20003727... (16 Replies)
Discussion started by: Suman Singh
16 Replies

8. Shell Programming and Scripting

String comparision in shell scripting

Hi Guys, I am new to scripting I have written a code to compare strings,but I am getting some Exception Code snippet: MODE="D" if ]; then . $file1 fi Error: ./BatchJobs.sh: [[: execute permission denied I have given all Execute permissions to the script(chmod 755... (2 Replies)
Discussion started by: Anji
2 Replies

9. Shell Programming and Scripting

difference between AIX shell scripting and Unix shell scripting.

please give the difference between AIX shell scripting and Unix shell scripting. (2 Replies)
Discussion started by: haroonec
2 Replies

10. UNIX for Dummies Questions & Answers

Unix shell scripting

I need to write a script which analyses an invoice file, counting the amount of pages in the file to be printed per account number and per invoice. The account numbers are stored in another file which has instructions on what do with ach customers invoice as per their account number. please... (6 Replies)
Discussion started by: la_burton
6 Replies
Login or Register to Ask a Question