Help with AWK - Compare a field in a file to lookup file and substitute if only a match


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Help with AWK - Compare a field in a file to lookup file and substitute if only a match
# 1  
Old 10-08-2012
Help with AWK - Compare a field in a file to lookup file and substitute if only a match

I have the below 2 files:

1) Third field from file1.txt should be compared to the first field of lookup.txt.
2) If match found then third field, file1.txt should be substituted with the second field from lookup.txt.
3)Else just print the line from file1.txt.

File1.txt:
Code:
|ABCD|1000|Jill|Smith|MD|
|ABCD|1001|Jack|Smith|MD|
|ABCD|1002|Mary|Smith|MD|
|ABCD|1003|Jill|Smith|MD|
|ABCD|AK10GFM|George|Foreman|MD|
|ABCD|2000|Akil|Roman|MD|

lookup.txt :
Code:
1000|NJ12JSM
1001|NJ34JSM
1002|NJ45MSM
1003|NJ12JSM
2000|PA10ARM

Output file:
Code:
|ABCD|NJ12JSM|Jill|Smith|MD|
|ABCD|NJ45MSM|Mary|Smith|MD|
|ABCD|NJ12JSM|Jill|Smith|MD|
|ABCD|AK10GFM|George|Foreman|MD|
|ABCD|PA10ARM|Akil|Roman|MD|

I tried giving this command, it returns only the matching values from File1.txt. Can someone help?
Code:
awk 'BEGIN {FS=OFS="|"} NR==FNR{a[$1]=$2;next} $3 in a{print $0}' lookup.txt file1.txt

---------- Post updated at 01:21 PM ---------- Previous update was at 01:06 PM ----------

Code:
awk -F"|" 'NR==FNR{a[$1]=$2;next}{for(i=3;i<=NF;i++){if($i in a)sub($i,a[$i],$i)}print}' OFS="|" lookupfile contentfile

The above post,from user ahamed101 provides a solution Smilie

Last edited by Scrutinizer; 10-08-2012 at 04:47 PM.. Reason: code tags
# 2  
Old 10-08-2012
Code:
 
awk 'BEGIN {FS=OFS="|"} NR==FNR{a[$1]=$2;next} $3 in a{$3=a[$3];print $0}' lookup.txt file1.txt

# 3  
Old 10-08-2012
Thanks for posting, but this code does only partial work.It should also print the line from file1.txt in case it's a mismatch.
# 4  
Old 10-08-2012
Code:
 
awk 'BEGIN {FS=OFS="|"} NR==FNR{a[$1]=$2;next} $3 in a{$3=a[$3]};{print $0}' lookup.txt file1.txt

# 5  
Old 10-08-2012
you would need to add else clause to situation when $3 in a is not found, such as below

Let me reformat the one-liner into a structured form:
Code:
gawk 'BEGIN {FS=OFS="|"}
{
        if(NR==FNR){
                a[$1]=$2;
                next
        }
        if($3 in a){
                $3=a[$3];
                print $0
        }
         else {
                print $0
        }
}'


Last edited by migurus; 10-08-2012 at 04:47 PM.. Reason: typo
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Use strings from nth field from one file to match strings in entire line in another file, awk

I cannot seem to get what should be a simple awk one-liner to work correctly and cannot figure out why. I would like to use patterns from a specific field in one file as regex to search for matching strings in the entire line ($0) of another file. I would like to output the lines of File2 which... (1 Reply)
Discussion started by: jvoot
1 Replies

2. Shell Programming and Scripting

awk to update field in file based of match in another

I am trying to use awk to match two files that are tab-delimited. When a match is found between file1 $1 and file2 $4, $4 in file2 is updated using the $2 value in file1. If no match is found then the next line is processed. Thank you :). file1 uc001bwr.3 ADC uc001bws.3 ADC... (4 Replies)
Discussion started by: cmccabe
4 Replies

3. Shell Programming and Scripting

awk to print field from lookup file in output

The below awk uses $3 and $4 in search as the min and max, then takes each $2 value in lookup and compares it. If the value in lookupfalls within the range in searchthen it prints the entire line in lookup/ICODE]. What I can't seem to figure out is how to print the matching $5 from search on that... (4 Replies)
Discussion started by: cmccabe
4 Replies

4. Shell Programming and Scripting

awk to update field file based on match

If $1 in file1 matches $2 in file2. Then the value in $2 of file2 is updated to $1"."$2 of file2. The awk seems to only match the two files but not update. Thank you :). awk awk 'NR==FNR{A ; next} $1 in A { $2 = a }1' file1 file2 file1 name version NM_000593 5 NM_001257406... (3 Replies)
Discussion started by: cmccabe
3 Replies

5. Shell Programming and Scripting

Match pattern1 in file, match pattern2, substitute value1 in line

not getting anywhere with this an xml file contains multiple clients set up with same tags, different values. I need to parse the file for client foo, and change the value of tag "64bit" from false to true. cat clients.xml <Client type"FIX"> <ClientName>foo</ClientName>... (3 Replies)
Discussion started by: jack.bauer
3 Replies

6. UNIX for Dummies Questions & Answers

Lookup field in map file

Hi, I have two questions which I would massively appreciate help with. 1. I am trying to insert a field into a file similar to the vlookup function in excel. In column 2 is a gene id for which i would like to insert the full name in the adjacent column. I have a map file (map.file) which... (1 Reply)
Discussion started by: genehersh
1 Replies

7. Shell Programming and Scripting

File field to replace lookup from another file

Hi All, I don't know how to fast do this field replace that need lookup from another file to form the update result:confused: I want to do it by general shell script Can anyone help to solve it ? Thanks for your kindly reply in advance. CK (0 Replies)
Discussion started by: ckwong99
0 Replies

8. Shell Programming and Scripting

Match list of strings in File A and compare with File B, C and write to a output file in CSV format

Hi Friends, I'm a great fan of this forum... it has helped me tone my skills in shell scripting. I have a challenge here, which I'm sure you guys would help me in achieving... File A has a list of job ids and I need to compare this with the File B (*.log) and File C (extend *.log) and copy... (6 Replies)
Discussion started by: asnandhakumar
6 Replies

9. Shell Programming and Scripting

[Solved] Lookup a file and match the contents

Hi, I appreciate all who have been very helpful to me in providing valuable suggestions and replies. I want to write a script to look up a file and match the contents. Let me go through the scenario. Lets say i have two files Content file: abc, bcd, adh|bcdf|adh|wed bcf, cdf,... (2 Replies)
Discussion started by: forums123456
2 Replies

10. Shell Programming and Scripting

AWK: Pattern match between 2 files, then compare a field in file1 as > or < field in file2

First, thanks for the help in previous posts... couldn't have gotten where I am now without it! So here is what I have, I use AWK to match $1 and $2 as 1 string in file1 to $1 and $2 as 1 string in file2. Now I'm wondering if I can extend this AWK command to incorporate the following: If $1... (4 Replies)
Discussion started by: right_coaster
4 Replies
Login or Register to Ask a Question