首页 > 解决方案 > 比较awk中的两个列

问题描述

我正在尝试匹配两个表中的第一列。在下面的示例中,我需要在第二个表上获取到期日期并使用 `AWK.

我尝试了下面的代码,但它不起作用

awk 'NR==FNR{a[$1]=$2;next;}{print $0 "," ($1 in a ? a[$1] : $2 )}' table1 table2

表格1

LICENSE,ALLOCATION,IN_USE
LicenseA,1102,98
LicenseB,267,105
LicenseC,546,500
LicenseD,982,23

表2

LICENSE,EXPIRY
LicenseA,03/31/2019
LicenseB,03/25/2019
LicenseC,03/31/2019

期望的输出:

LICENSE,ALLOCATION,IN_USE,EXPIRY
LicenseA,1102,98,03/31/2019
LicenseB,267,105,03/25/2019
LicenseC,546,500,03/31/2019
LicenseD,982,23,N/A

标签: awk

解决方案


尝试:

$ awk -F, 'NR==FNR{a[$1]=$2;next;}{print $0,a[$1]?a[$1]:"N/A"}' OFS=, Table2 Table1
LICENSE,ALLOCATION,IN_USE,EXPIRY
LicenseA,1102,98,03/31/2019
LicenseB,267,105,03/25/2019
LicenseC,546,500,03/31/2019
LicenseD,982,23,N/A

回答原始问题

尝试:

$ awk -F, 'NR==FNR{a[$1]=$0;next;}{print a[$1],$2}' OFS=, table1 table2
LICENSE,ALLOCATION,IN_USE,EXPIRY
LicenseA,1102,98,03/31/2019
LicenseB,267,105,03/25/2019
LicenseC,546,500,03/31/2019

这个怎么运作:

  • -F,

    将输入的字段分隔符设置为逗号。

  • NR==FNR{a[$1]=$0;next;}

    对于第一个文件 ,table1将其所有数据收集在一个关联数组 中a,其中每一行 ,$0都保存在其第一个字段 的 eky 下$1

  • print a[$1],$2

    在读取第二个文件时table2,打印表that corresponds to the first field followed by the expiry,$2` 中的行。

  • OFS=,

    将输出字段分隔符设置为逗号。


推荐阅读