我有两个文件,A和B,列之间用\分隔。
文件A的2列与文件B的1列完全相同。
我想合并这两个文件,保持文件B相同,根据两个文件之间的相同字段添加一个新列,并在文件A的列1和文件B的列2之间进行部分匹配。
我说的部分匹配的意思是这样的:
文件A(第1列)|文件B(第2列)|A=B?
-|-|
A|A?|True
A|ASD|True
B|B|True
C|c|True
C|CA|True
D|A|False
如果文件A中有同一列1和2的值,则必须将它们添加到文件B中,以分隔;
文件A
A\2022.10.10\注意a
A\2022.10.10\注b
B\2022.10.14\注c
A\2022.10.14\注d
C\2022.10.15\注e
文件B
2022.10.10\A?
2022.10.14\B?
2022.10.14\a
2022.10.15\C
2022.10.15\D
期望输出
2022.10.10\a?\注a;注b
2022.10.14\B?\注c
2022.10.14\a\注d
2022.10.15\C\注e
2022.10.15\D
我怎么才能用awk做到这一点呢?
1条答案
按热度按时间mrwjdhj31#
Awk脚本可能会工作,这取决于您的要求的细节(例如,键是否区分大小写)。
这样的awk脚本可能会起作用:
您可以这样使用它:
在函数make_key中,您可以通过返回k或大写版本来配置区分大小写。
在读取第一个文件(FILE_A)期间使用
NF==FNR
块。在这里,笔记存储在由第二列和第一列组成的键下。如果注册表项已经存在,则附加备注。在
NF!=FNR
块中,读取第二个文件(FILE_B)。在这里,如果FILE_B行以关键字开始,我们通过比较每个关键字来打印FILE_B行和匹配的注解。如果没有匹配的键,则只打印FILE_B行。BEGIN
块只是设置了字段分隔符。