使用 awk 如何合并两个文件中的数据并将第二个文件中的值替换为第一个文件?

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

任何关于如何使用 awk 的想法?

两个输入文件,data.txt 和 keys.txt:

data.txt 包含一些数据:

A;1
B;2
A;3

keys.txt 包含 "key;value" 对("C" 在这个例子中不是 data.txt 的一部分,但 awk 脚本应该仍然有效):

A;30
B;20
C;10

输出应如下所示:

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

因此,data.txt 中包含 keys.txt 中任何键的每一行都应将相应的值附加到 data.txt 中的行。

awk解决方案:

awk -F';' 'NR==FNR{a[]=; next}{if( in a) [=10=]=[=10=] FS a[]; print}' file2 file1

输出:

A1;1;2
A2;2;1
A3;3;0.5
A1;1;2
A2;2;1
A3;3;0.5

  • NR==FNR - 处理第一个文件,即 file2

  • a[]= - 为每个 key

  • 累积附加值
  • if( in a) [=15=]=[=15=] FS a[] - 如果第一列匹配则附加值

awk 救援!

假设第二个文件有与第一个文件不同的唯一键(如果没有,你需要指定会发生什么)

$ awk 'BEGIN   {FS=OFS=";"} 
       NR==FNR {a[]=; next} 
        in a {print [=10=],a[]}' file2 file1

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

ps。注意文件的顺序...