Comparing 2 input files -Awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Comparing 2 input files -Awk
# 1  
Old 09-15-2010
Comparing 2 input files -Awk

Compare 2 files and print the values input1 (c1 20 100 X_y10) along with one closest highest (c1 100 200 X_y10) and one lowest values (c1 10 15 X_y10) from input2

input1

Code:
c1	20	100  X_y10

input2

Code:
c1	5	10  X_y10
c1	10	15  X_y10
c1	100	200  X_y10
c1	200	300  X_y10

output

Code:
c1	20	100	X_y10  c1	10	15  X_y10
c1	20	100	X_y10  c1	100	200  X_y10

here is my tried code.

Code:
awk 'NR==FNR{a[$0]++;next}                                                         
$0 in a {a[$0]++; next}
{b[$0]++}
END{
  for(i in a){
    if(a[i]==b[i]) {
      print a[i]b[i] 
    }
    else if(a[i]>=b[i]) {
        print a[i]b[i] 
    }
else if(a[i]<=b[i]) {
        print a[i]b[i] 
    }
  }
}' input1 input2


Last edited by bumblebee_2010; 09-15-2010 at 03:56 AM..
# 2  
Old 09-15-2010
Quote:
Originally Posted by bumblebee_2010
Compare 2 files and print the values input1 (c1 20 100 X_y10) along with one closest highest (c1 100 200 X_y10) and one lowest values (c1 10 15 X_y10) from input2

input1

Code:
c1	20	100  X_y10

input2

Code:
c1	5	10  X_y10
c1	10	15  X_y10
c1	100	200  X_y10
c1	200	300  X_y10

output

Code:
c1	20	100	X_y10  c1	10	15  X_y10
c1	20	100	X_y10  c1	100	200  X_y10

here is my tried code.

Code:
awk 'NR==FNR{a[$0]++;next}                                                         
$0 in a {a[$0]++; next}
{b[$0]++}
END{
  for(i in a){
    if(a[i]==b[i]) {
      print a[i]b[i] 
    }
    else if(a[i]>=b[i]) {
        print a[i]b[i] 
    }
else if(a[i]<=b[i]) {
        print a[i]b[i] 
    }
  }
}' input1 input2

Shouldn't the output of the second line be?
Code:
c1	20	100	X_y10  c1	200	300  X_y10

Please clarify if not.
# 3  
Old 09-15-2010
haa..No

It is not the closest highest of 20 and 100.

100 and 200 is the closest-highest.
20......100..100......200

and closest- lowest
10......5....20.......100
# 4  
Old 09-15-2010
How about this,

Code:
line1=`cat file1`
sort -nk2,3 file1 file2 | awk  -v v1="$line1" '{if (v1==$0) { print v1,a;getline;print v1,$0;exit} else { a=$0}}'

# 5  
Old 09-15-2010
not working

I'm afraid not working
# 6  
Old 09-15-2010
Its working fine at my end, What error are you receiving ?
Code:
[root@powerbroker ~]# cat cmp1
c1      20      100  X_y10
[root@powerbroker ~]# cat cmp2
c1      5       10  X_y10
c1      10      15  X_y10
c1      100     200  X_y10
c1      200     300  X_y10
[root@powerbroker ~]# line1=`cat cmp1`
[root@powerbroker ~]# echo $line1
c1 20 100 X_y10
[root@powerbroker ~]# sort -nk2,3 cmp1 cmp2 | awk  -v v1="$line1" '{if (v1==$0) { print v1,a;getline;print v1,$0} else { a=$0}}'
c1      20      100  X_y10 c1   10      15  X_y10
c1      20      100  X_y10 c1   100     200  X_y10
[root@powerbroker ~]#

# 7  
Old 09-15-2010
Oh

I know why because my input1 actually very big with specific keys (column 4) not just one line

Ex:
Code:
cat input1
c1      20      100     X_y10
c1      20      100     X_y11
c1      20      100     X_y12



---------- Post updated at 05:42 AM ---------- Previous update was at 04:20 AM ----------

May be to explain in detail

input1
Code:
c1      20      100     XXX
c1      20      100     YYY

input2
Code:
c1      5       10      XXX
c1      10      15      XXX
c1      100     200     XXX
c1      200     300     XXX
c1      18      19      YYY
c1      101     200     YYY
c1      201     211     YYY

Output

Code:
c1      20      100     XXX  c1      10      15      XXX
c1      20      100     XXX  c1      100     200     XXX
c1      20      100     YYY  c1      18      19      YYY
c1      20      100     YYY  c1      101     200     YYY

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk for comparing two files

so have file1 like this: joe 123 jane 456 and then file2 like this: 123 left right 456 up down joe ding dong jane flip flop what I need to do is compare col1 and col2 in file1 with col1 in file2 and generate a new file that has lines like this: joe 123 ding dong left right jane... (11 Replies)
Discussion started by: Jaymz
11 Replies

2. 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

3. Shell Programming and Scripting

comparing 2 files with awk

Hi, I'm a new user in awk and i'm trying to compare two files to create a third one if some values match in both files. The first file has this content: s 45.960746365 _21_ AGT 2490 [21:0 22:0 s 45.980418496 _21_ AGT 2491 [21:0 22:0 s 46.000090627 _21_ AGT 2492 [21:0 22:0 s 47.906552206... (2 Replies)
Discussion started by: carlosoria
2 Replies

4. UNIX for Advanced & Expert Users

Comparing two files using awk

i have one file say file1 having many records.Each record contains 2000 characters.i have to compare 192-200 (stored as name)characters in this file from other file say file2 having name stored in 1-9 characters. after comparing i have to print the record from file1 in another file say file3 ... (3 Replies)
Discussion started by: sonam273
3 Replies

5. UNIX for Dummies Questions & Answers

comparing two files having different delimiters using awk

hi, i have a file called file1.txt and it's contents are as below: file1.txt: ------- abc,123, thomas dab,234,muller gab,456,ram The lookup file's contents are as below: lookup.txt ---------- abc|japan dcd|US dab|china gab|brazil (3 Replies)
Discussion started by: amar1003
3 Replies

6. Shell Programming and Scripting

comparing two files using awk

hit brick wall while trying to knock up a script that will take values from the "lookup" file and look it up in the "target" file and return values that dont appear in "target" but do in "lookup". just knocked up something using bits from previous threads but theres gotta be something wrong... (13 Replies)
Discussion started by: jack.bauer
13 Replies

7. Shell Programming and Scripting

AWK: Comparing two columns from two different files

Hi - I have two files as follows: File 1: chr5 118464905 118465027 ENST00000514151 utr5 0 + chr5 118464903 118465118 ENST00000504031 utr5 0 + chr5 118468826 118469180 ENST00000504031 utr5 0 + chr5 118469920 118470084 ... (14 Replies)
Discussion started by: polsum
14 Replies

8. Shell Programming and Scripting

awk - comparing files

I've been trying to use awk to compare two files that have pretty much the same data in apart from certain lines where in one file a fields value has changed. I want to print the line from the first file and the changed line from the second file. At the moment, all I can get it to do is print the... (6 Replies)
Discussion started by: dbrundrett
6 Replies

9. Shell Programming and Scripting

Comparing two files using awk

Hi, I have 2 text files n1 and n2. cat n1 : -------- 1234567890 4444444444 cat n2 : --------- 1234567890 4444444444 7777777777 8888888888 they are some sample records. File n1 contains some lookup records, whereas file n2 contains some transaction records. I need to get the... (2 Replies)
Discussion started by: kanu_kanu
2 Replies

10. Shell Programming and Scripting

comparing two files using awk.

Hi All, a new bie to awk, How to compare substring of col1,file 1 with col2file2 and get file1contents+col3file2 as output. file1 ----- kumarfghh,23,12000,5000 rajakumar,24,14000,2500 rajeshchauhan,25,16000,2600 manoj,26,17000,2300 file 2 -------- 123,kumar,US, 123,sukumar,UK... (4 Replies)
Discussion started by: jerome Sukumar
4 Replies
Login or Register to Ask a Question