Compare values in two different files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Compare values in two different files
# 1  
Old 08-17-2016
Compare values in two different files

Hello,

I have output in one file that looks like:

Code:
AA 3
BB 1
CC 3
DD 6
EE 2
FF 6

And output in another file that looks like:

Code:
1 EE
3 CC
2 AA

I basically want to be able to match the counts in each file against the correct corresponding initials (and then obviosuly base a command on whether true or false). However, not all initials will always appear and will not be in the same order in both files if they do appear.

Would it be some sort of awk command to complete this?
# 2  
Old 08-17-2016
Hello Nik44,

As you haven't mentioned expected output, so based on my assumptions could you please try following.
Let's say following are the Input_files.
Code:
cat Input_file1
AA 3
BB 1
CC 3
DD 6
EE 2
FF 6

cat Input_file2
1 EE
3 CC
2 AA
12 AF

Code:
awk 'BEGIN{print "ids which are present in file1 and file2 both:"} FNR==NR{A[$1]=$0;next} ($2 in A){print;delete A[$2];next} !($2 in A){Q=Q?Q ORS $0:$0}  END{print "ids which are present in file2 and not in file1" ORS Q;print "ids which  are present in file1 and not in file2.";for(i in A){print A[i]}}' Input_file1  Input_file2

Output will be as follows.
Code:
ids which are present in file1 and file2 both:
1 EE
3 CC
2 AA
ids which are present in file2 and not in file1
12 AF
ids which  are present in file1 and not in file2.
BB 1
DD 6
FF 6

Thanks,
R. Singh

Last edited by RavinderSingh13; 08-17-2016 at 09:13 AM..
# 3  
Old 08-17-2016
Apologies, probably didn't explain as well as I could have.

There is effectively no output. What I want to happen is where there is a count match for a pair of letters in each file, I want this to then trigger a command.

So basically with the example provided in this instance only CC would match as both have a count of 3 (and therefore trigger command). The remaining letter pairs wouldn't trigger my command as the counts in each files do not match.

Does this clarify?
# 4  
Old 08-17-2016
That is a better start, but it still leaves holes...

What is the name of this command?

Are any arguments supposed to be passed to this command (and, if so, what arguments)?

What shell are you using?

What operating system are you using?
# 5  
Old 08-17-2016
This for a unix bash script.

When there is a match between a pair of letters AND corresponding counts between the two files (if "CC" is 3 in file1 and "CC" is also 3 in file2) then I would like this to then move particular files from one directory into another directory (it's not so much this part of the syntax I'm concerned with though, more how to do the actual comparison).
# 6  
Old 08-17-2016
Quote:
Originally Posted by Nik44
This for a unix bash script.
When there is a match between a pair of letters AND corresponding counts between the two files (if "CC" is 3 in file1 and "CC" is also 3 in file2) then I would like this to then move particular files from one directory into another directory (it's not so much this part of the syntax I'm concerned with though, more how to do the actual comparison).
Hello Nik44,

Still we are not sure about your requirement as you didn't tell us which commands you want to execute. As an example following you could try and let us know if this helps or please mention your complete requirements.
Code:
awk 'FNR==NR{A[$1 OFS $2]=$0;next} (($2 OFS $1) in A){print;system("date");delete A[$2 OFS $1];next}' Input_file1  Input_file2

Output will be as follows.
Code:
3 CC
Wed Aug 10 12:36:29 GMT 2016

Thanks,
R. Singh
# 7  
Old 08-17-2016
Hi.

Using commands to follow the decomposition of the problem into steps:
Code:
#!/usr/bin/env bash

# @(#) s1       Demonstrate filter one file with contents from another, grep

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C awk tee grep

FILE=${1-data1}

pl " Input data file $FILE:"
cat $FILE

pl " Input file data2:"
cat data2

pl " Amended input data file data3:"
awk '{ print $2,$1}' data2 |
tee data3

rm -f data4
pl " Results, filter data1, selecting data3 contents:"
grep -f data3 data1 |
tee data4
# rm -f data4   # test when grep does not create a file
pe
if [ -s data4 ] # true if file exists and size > 0
then
  while read line       # do some command for each filtered line
  do
    pe " Do your command here with line \"$line\""
  done < data4
else
  pe " No lines selected."
fi

exit 0

producing:
Code:
$ ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.4 (jessie) 
bash GNU bash 4.3.30
awk GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
tee (GNU coreutils) 8.23
grep (GNU grep) 2.20

-----
 Input data file data1:
AA 3
BB 1
CC 3
DD 6
EE 2
FF 6

-----
 Input file data2:
1 EE
3 CC
2 AA
12 AF

-----
 Amended input data file data3:
EE 1
CC 3
AA 2
AF 12

-----
 Results, filter data1, selecting data3 contents:
CC 3

 Do your command here with line "CC 3"

Best wishes ... cheers, drl

PS I thought I had posted this earlier, apologies if it becomes a duplicate post
This User Gave Thanks to drl For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Compare two files column values using awk

Judi # cat File1 judi /export/home 76 judi /usr 83 judi # judi # cat File2 judi /export/home 79 judi /usr 82 judi # if COLUMN3 of File2 is greater that COLUMN3 of File1, then print File2's lines juid /export/home 79 Code tags please (2 Replies)
Discussion started by: judi
2 Replies

2. Shell Programming and Scripting

Find and compare values from different txt files

Hello, i am new in Bash. Actually i have a directory : /home/resultfiles and inside i have these txt files: 531_1.out.res, 531_2.out.res , 531_3.out.res 532_1.out.res, 532_2.out.res , 532_3.out.res 533_1.out.res, 533_2.out.res, 533_3.out.res All these txt files has this format : num_q all... (3 Replies)
Discussion started by: nimpoura
3 Replies

3. Shell Programming and Scripting

Compare values in two files. For matching rows print corresponding values from File 1 in File2.

- I have two files (File 1 and File 2) and the contents of the files are mentioned below. - I am trying to compare the values of Column1 of File1 with Column1 of File2. If a match is found, print the corresponding value from Column2 of File1 in Column5 of File2. - I tried to modify and use... (10 Replies)
Discussion started by: Santoshbn
10 Replies

4. Shell Programming and Scripting

ksh to compare alphanumeric values from 2 files

Hi there, I want to compare 2nd column which are alphanumeric values from each of the 2 files i.e.,lspv_pre.out and lspv_post.out , if found echo some message. lspv_pre.out hdisk0 00c39eaa451144dd rootvg active hdisk1 00c39eaa45223322 ... (3 Replies)
Discussion started by: mbak
3 Replies

5. UNIX for Dummies Questions & Answers

Compare two flat files and update one based on the values in the other

Hi, I'm a newbie to scripting and am trying to compare two files using awk. The files are exactly the same dimensions. Where the first file has 0's I would like to create an updated version of the second file which has the corresponding elements set to zero also. eg: file1: 12345 1 2 0... (3 Replies)
Discussion started by: kasan0
3 Replies

6. Shell Programming and Scripting

Compare to files and export only different values

Hello, I need to compare two files which have the following structure File1: No : 1 Name : George/Brown Value2 : type2 Value3 : type3 Date : Wed Oct 20 11:12:58 2010 Value : yes No : 2 Name : John/Cash Value2 :... (4 Replies)
Discussion started by: @dagio
4 Replies

7. Shell Programming and Scripting

Compare two files based on values of fields.

Hi All, I have two files and data looks like this: File1 Contents #Field1,Field2 Dist_Center_file1.txt;21 Dist_Center_file3.txt;20 Dist_Center_file2.txt;20 File2 Contents (*** No Header ***) Dist_Center_file1.txt;23 Dist_Center_file2.txt;20 Dist_Center_file3.txt;20 I have... (4 Replies)
Discussion started by: Hangman2
4 Replies

8. Shell Programming and Scripting

open 2 files and compare values script - urgent

Hi gurus I have two csv files that are outputs. The file contains data similar to s.no,number1,number2,date1 -------------------------------- 1, a123,482.29,11/28/07 13:00 2,a124,602.7,9/24/07 14:00 3,a125,266.93,10/9/07 16.48 4,a126,785.15,11/14/07 16:08 <file 2> s.no name... (2 Replies)
Discussion started by: inkyponky
2 Replies

9. Shell Programming and Scripting

Need to compare values on two CSV files

:( Hello, Having a problem with reading two files using awk/nawk, am new to both them. I need to compare field values between two csv files and arrange for an appropriate output if both the values are equal or not for each feild. $cat File1.csv... (4 Replies)
Discussion started by: pgop
4 Replies

10. Shell Programming and Scripting

Compare values between files

I have two files with same name residing in different directory. Each file has 14 columns. I want to compare column by column for each row. Also, have to take two columns as key identifier;pick a row in File1; retrieve the corresponding row from file2 and then compare the values. Can... (1 Reply)
Discussion started by: Sangtha
1 Replies
Login or Register to Ask a Question