基于第二个文件中的匹配更新文件。

时间:2014-03-27 14:55:10

标签: awk

我有两个文件,key.txt和target.txt,我想根据key.txt文件中是否存在字段来更新target.txt文件。

key.txt

B x001 block134 10 50
B g013 block341 10 70
B x560 block444 30 99
B f777 block878 50 29

target.txt

h01 x999 3 4
h08 x560 4 7
h14 f777 13 55
j88 h888 15 66

output.txt如下所示。它是带有附加列($ 5)的target.txt文件。如果在target.txt中的$ 2和key.txt中的$ 2之间找不到匹配,则$ 5 ==" NM"。在匹配的情况下,来自key.txt的$ 3,$ 4和$ 5的信息被合并($ 3":" $ 4":" $ 5)并被定为$ 5在output.txt。

h01 x999 3 4 NM
h08 x560 4 7 block444:30:99
h14 f777 13 55 block878:50:29
j88 h888 15 66 NM

到目前为止,我一直在使用以下内容根据$ 2的匹配过滤文件,但很难修改它以实际根据匹配合并数据。

awk 'FNR == NR {keys[$2]; next} $2 in keys' key.txt target.txt > output.txt

1 个答案:

答案 0 :(得分:1)

这应该有效:

$ awk 'NR==FNR{a[$2]=$3":"$4":"$5;next}{$5=(a[$2])?a[$2]:"NM"}1' key.txt target.txt 
h01 x999 3 4 NM
h08 x560 4 7 block444:30:99
h14 f777 13 55 block878:50:29
j88 h888 15 66 NM