Search code examples
awkcalculated-columnsmultiplication

Using awk how do I combine data in two files and substitute values from the second file to the first file?


Any ideas how to the following using awk?

Two input files, data.txt and keys.txt:

data.txt contains some data:

A;1
B;2
A;3

keys.txt contains "key;value" pairs ("C" is in this example not part of data.txt, but the awk script should still work):

A;30
B;20
C;10

The output should be as follows:

A;1;30
B;2;20
A;3;30

Hence, each row in data.txt that contains any key from keys.txt should get the corresponding value appended to the row in data.txt.


Solution

  • awk to the rescue!

    assumes the second file has unique keys unlike first file (if not you need to specify what happens then)

    $ awk 'BEGIN   {FS=OFS=";"} 
           NR==FNR {a[$1]=$2; next} 
           $1 in a {print $0,a[$1]}' file2 file1
    
    A;1;30
    B;2;20
    A;3;30
    

    ps. note the order of files...