Compare two files and merge columns in a third


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Compare two files and merge columns in a third
# 1  
Old 04-04-2007
Compare two files and merge columns in a third

Hi,

I'm working with snmp, with a little script I'm able to obtain from a switch a list with a couple of values with this format

Port Mac
1 00:0A:0B:0C:0D:0E
....
(hundred of entries)


Now with a simple arp on a router I am able to obtain another list

00:0A:0B:0C:0D:0E pcname.mydomain.tld
00:0A:0B:1C:0D:0E 1.2.3.4
....
(hundred of entries, it could be a FQDN or an IP number cause not all the entries are known in DNS server)

The problem is to have a little batch script that takes the first file reads the first entry compares the MAC with all the entries in the second file and if it find a match writes the output in a third file, something like

1 00:0A:0B:0C:0D:0E pcname.mydomain.tld

if it doesn't find a match write the same the row maybe adding something like not found.

An this until all the entries in the first file are searched out.

Someone can help?
# 2  
Old 04-04-2007
Code:
nawk '
  FNR==NR { arp[$1]=$2; next }

  { printf("%s%s%s\n", $0, OFS, ($2 in arp) ? arp[$2] : "not found") }

' FILEarp.txt FILEsnmp.txt

# 3  
Old 04-04-2007
Post deleted - misread the question.

Last edited by radoulov; 04-04-2007 at 12:23 PM..
# 4  
Old 04-04-2007
Thank you, very fast and useful replay, it works.

Another question, my first script (or better Ivanov script see http://groups.google.it/group/comp.d...f5ef649d853b7c) has this structure

#!/bin/sh
#
#
Mac=".1.3.6.1.2.1.17.4.3.1.1"; Port=".1.3.6.1.2.1.17.4.3.1.2"
#
Script=`basename $0`
Host=.........
Pass=........ # SNMP community name
#
GET () { snmpwalk -Onq -c $Pass -v 1$Host| $1 sed -e s/^$1\.// -e s/\"//g |
sort ;}
JOIN () { join -o 1.2,2.2,2.3,2.4,2.5,2.6,2.7 $1 $2 | sort ;}
#
for OID in Mac Port
do eval "GET \$$OID > /tmp/${Script}\$$OID" ; done

JOIN /tmp/${Script}${Port} /tmp/${Script}${Mac} | sort -nk 1,2 >> snmp.txt


How can I substitute the variable Host with a pointer to a text file with a series of host, one per line, and produce for each one of them a file maybe in /tmp in the format IPOFSWITCH.txt?
# 5  
Old 04-04-2007
Here is one possible solution for your original post using only unix commands:

### Create matched records: in update file and also in the master file.
egrep -f upd_file master_file > matched_file

### Create not matched records: in update file and not in matched file.
egrep -v -f matched_file upd_file > tmp_not_matched_file

### Add "NOT FOUND" to the end of not matched records.
sed 's/$/NOT FOUND/' tmp_not_matched_file > not_matched_file

### Merge and sort all records into solution file.
sort matched_file not_matched_file > solution_file

Last edited by Shell_Life; 04-04-2007 at 12:49 PM.. Reason: correct mistyped word.
# 6  
Old 04-04-2007
I'm testing the egrep solution but I have no match. Maybe I do some errors.

This is the egrep command

egrep -f upd_file master_file > matched_file

I suppose upd_file is the one with ip port and mac, master the one with mac and name or ip.

I've tried to invert the files, for first the one with mac and name or ip but no luck, what I'm doing wrong?
# 7  
Old 04-04-2007
Quote:
Originally Posted by CM64
I'm testing the egrep solution but I have no match. Maybe I do some errors.

This is the egrep command

egrep -f upd_file master_file > matched_file

I suppose upd_file is the one with ip port and mac, master the one with mac and name or ip.

I've tried to invert the files, for first the one with mac and name or ip but no luck, what I'm doing wrong?
Shell_Lifes solution wont work
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Compare and merge two big CSV files

Hi all, i need help. I have two csv files with a huge amount of data. I need the first column of the first file, to be compared with the data of the second, to have at the end a file with the data not present in the second file. Example File1: (only one column) profile_id 57036226... (11 Replies)
Discussion started by: SirMannu
11 Replies

2. Shell Programming and Scripting

Compare 2 csv files by columns, then extract certain columns of matcing rows

Hi all, I'm pretty much a newbie to UNIX. I would appreciate any help with UNIX coding on comparing two large csv files (greater than 10 GB in size), and output a file with matching columns. I want to compare file1 and file2 by 'id' and 'chain' columns, then extract exact matching rows'... (5 Replies)
Discussion started by: bkane3
5 Replies

3. Shell Programming and Scripting

Compare two files and merge into third

Hello: Newbie with Awk. Trying to compare two files and merge data based on CID. Please see the input file format and desired output. Any help is appreciated. TIA Input File1 CID1 --- TYP1 --- DCN1 --- INDATE1 --- IN-DATA1 CID2 --- TYP2 --- DCN2 --- INDATE2 --- IN-DATA2 CID3 ---... (6 Replies)
Discussion started by: wincrazy
6 Replies

4. Shell Programming and Scripting

Merge columns on different files

Hello, I have two files that have this format: file 1 86.82 0.00 86.82 43.61 86.84 0.00 86.84 43.61 86.86 0.00 86.86 43.61 86.88 0.00 86.88 43.61 file 2 86.82 0.22 86.84 0.22 86.86 0.22 86.88 0.22 I would like to merge these two files such that the final file looks like... (5 Replies)
Discussion started by: kayak
5 Replies

5. Shell Programming and Scripting

Compare and Merge files

Hi All, I have two different files as shown below separated by a "|". I need to compare the first column from both the files and if they match merge both the columns. File 1 "S00172012"|"CHRONIC RENAL FAILURE"|""|"I" "S00159962"|"SUBENDO INFRC-INIT EPISD"|""|"I" "S00255303"|"BENIGN... (6 Replies)
Discussion started by: nua7
6 Replies

6. Shell Programming and Scripting

Merge columns of different files

Hi, I have tab limited file 1 and tab limited file 2 The output should contain common first column vales and corresponding 2nd column values; AND also unique first column value with corresponding 2nd column value of the file that contains it and 0 for the second file. the output should... (10 Replies)
Discussion started by: polsum
10 Replies

7. UNIX for Dummies Questions & Answers

Merge two files with two columns being similar

Hi everyone. How can I merge two files, where each file has 2 columns and the first columns in both files are similar? I want all in a file of 4 columns; join command removes the duplicate columns. 1 Dave 2 Mark 3 Paul 1 Apple 2 Orange 3 Grapes to get it like this in the 3rd file:... (9 Replies)
Discussion started by: Atrisa
9 Replies

8. Shell Programming and Scripting

merge the two files which has contain columns

Hi may i ask how to accomplish this task: I have 2 files which has multiple columns first file 1 a 2 b 3 c 4 d second file 14 a 9 .... 13 b 10.... 12 c 11... 11 d 12... I want to merge the second file to first file that will looks like this ... (2 Replies)
Discussion started by: jao_madn
2 Replies

9. UNIX for Dummies Questions & Answers

compare columns from 2 files and merge

Dear all, Being new to Unix i have a problem. I have 2 files: File 1: 118,1,0,2,3,0,5,0.3,0,0.3,0.6,1 118,2,1,2,2,0,5,0.4,0,0.4,0.4,1 118,4,2,0,3,0,5,0.7,0,0.3,0.6,1 118,6,4,1,0,0,5,0.8,0,0.2,0,1 File 2: 118,1,BFGL-NGS-109695,3610326,0,18,1,0.556,0.389,0.056,0.25,0.8183... (2 Replies)
Discussion started by: samwilkinson
2 Replies

10. Shell Programming and Scripting

compare the column from 3 files and merge that line

I have 3 file, each of has got 80000 records. file1.txt ----------------------- ABC001;active;modify;accept; ABC002;notactive;modify;accept; ABC003;notactive;no-modify;accept; ABC004;active;modify;accept; ABC005;active;no-modify;accept; file2.txt ---------------------------... (8 Replies)
Discussion started by: ganesh_mak
8 Replies
Login or Register to Ask a Question