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

使用awk如何组合两个文件中的数据并将第二个文件中的值替换为第一个文件?,awk,calculated-columns,multiplication,Awk,Calculated Columns,Multiplication,如何使用awk进行以下操作 两个输入文件data.txt和keys.txt: data.txt包含一些数据: A;1 B;2 A;3 keys.txt包含“key;value”对(“在本例中,C”不是data.txt的一部分,但awk脚本仍应工作): 输出应如下所示: A;1;30 B;2;20 A;3;30 因此,data.txt中包含keys.txt中任何键的每一行都应获得附加到data.txt中该行的相应值。awk解决方案: awk -F';' 'NR==FNR{a[$1]=$2; n

如何使用awk进行以下操作

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

data.txt包含一些数据:

A;1
B;2
A;3
keys.txt包含“key;value”对(“在本例中,C”不是data.txt的一部分,但awk脚本仍应工作):

输出应如下所示:

A;1;30
B;2;20
A;3;30
因此,data.txt中包含keys.txt中任何键的每一行都应获得附加到data.txt中该行的相应值。

awk解决方案:

awk -F';' 'NR==FNR{a[$1]=$2; next}{if($1 in a) $0=$0 FS a[$1]; 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[$1]=$2
    -为每个键累积附加值

  • if($1 in a)$0=$0 FS a[$1]
    -如果第一列匹配,则追加值


    • awk
      救援

      假设第二个文件具有与第一个文件不同的唯一键(如果没有,则需要指定发生的情况)


      注意文件的顺序…

      Stackoverflow不是免费的代码编写服务。如果你试图写一些东西,但遇到了一些困难,那么展示一下你所做的,并提出一个具体的问题。有关提示,请参阅。如果你只是想做免费的工作,那么StackOverflow就不适合这样的要求。学会自己编写代码或付钱给别人为你编写代码。在这个网站上被问了一百万遍,回答了一百万遍,到处看看……为什么最后的输出不是
      a;3.30
      ?@karakfa你是对的,是我的错。更新!谢谢你的回复,但是,它并不完全有效,我澄清了原来的问题。@Markus,我看不出有什么问题。输出如您的问题所示。检查您是否没有输入任何错误,或者您可能混淆了文件的顺序是的,谢谢,根据问题,输出是正确的,但是我做了一个简单的示例。对于更大的数据(我只是用更多的数据更新了原始问题),我无法使用awk解决方案。@Markus,你看到我答案中的输出了吗?@Markus,为什么每次都要更改数据?那不是good@karafka谢谢你的回复,这与我想要的结果不完全一样,我更新了原始问题以使其更精确。如果你无法描述问题,那么寻找答案是徒劳的…@karafka,以防keys.txt中没有与data.txt中的某些行匹配的键,如何为data.txt中的那些行添加默认值“1”?我认为这个问题已经被修改过了,不会得到更多的关注。我建议你写一个新的问题,包括你想涵盖的案例。
      A1;1;2
      A2;2;1
      A3;3;0.5
      A1;1;2
      A2;2;1
      A3;3;0.5
      
      $ 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