比较两个文件之间的多个列值

比较两个文件之间的多个列值

我在 Linux 机器上有两个 CSV 文件,包含数据如下:

文件A

Sunil,21,write a line,2312,12-03-2022   
Ashok,22,write a para,2312,12-03-2022
Sam,23,create file using,2312,12-03-2022

文件B

21,write a line,Writer
21,write a script,Writer
23,create file using,Coder
25,create class,Coder
22,write a para,Poet
22,write a file,Writer

现在,应将 FileA 的第 2 列和第 3 列(例如 21,写一行)与 FileB 进行比较,如果匹配,则打印 FileB 的第三列:

输出:

Writer
Poet
Coder

答案1

对于您想要的,并假设您的数据是所提供的,那么您可以按如下方式实现:

awk -F, 'NR==FNR{array[$2,$3]; next} ($1,$2) in array { print $NF}' filea fileb

基本上我们在这里所做的就是,将第 2 列和第 3 列存储在array停止处理当前记录中(我们使用next)。 then is $1and $2of fileb in arrayif so print $NFwhere$NF 引用记录的最后一列。

NRFNR是 awk 中的内置变量。 NR是指到目前为止的记录总数,而FNR是指当前文件中的记录数。

相关内容