awk - 比较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 -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=,
将输出字段分隔符设置为逗号。
推荐阅读
- android - 如何禁用日期选择器中的先前日期?
- javascript - 正则表达式完全匹配一个单词但接受一个字母的错误
- android - 领域仅在重新打开应用程序后才创建插入的对象
- angular - Angular 6 中的 HTTP 获取调用
- vba - VBA:查找后,FindNext 工作几次,然后运行时错误“380”
- node.js - 简单的控制台菜单
- c# - VSTS 中的集成测试
- rabbitmq - 即使设置了 cookie,RabbitMQ 身份验证也会失败
- angular - 使用外部 Sharepoint 文件 URL 下载 Ionic 3 文件
- javascript - 切换到相对位置