SGS
SGS

Reputation: 27

How to compare and replace fields using awk

I have a two files. If Field-9 of File-1 and Field-1 of File-2 is same then replace Field-1 of File-1 with Field-2 of File-1

file1:

12345||||||756432101000||756432||||
aaaaa||||||986754812345||986754||||
ccccc||||||134567222222||134567||||

file2:

756432|AAAAAAAAAAA  
986754|20030040000  

The expected output is:

12345||||||AAAAAAAAAAA||756432||||
aaaaa||||||20030040000||986754||||
ccccc||||||134567222222||134567|||

I tried this code

awk -F"|" 'NR==FNR{a[$1]=$2} NR>FNR{$7=a[$2];print}' OFS='|'  file2 file1

but instead of replacing the field, it gets deleted.

Upvotes: 0

Views: 254

Answers (1)

user000001
user000001

Reputation: 33327

You are using the wrong column as the index of the array in the second block, and you are not checking for missing keys. This produces the output you posted:

awk -F '|' -v OFS='|' 'NR==FNR{a[$1]=$2;next}$9 in a{$7=a[$9]}1' file2 file1

Upvotes: 2

Related Questions