如何使用awk工具关联两个文件查询userId对应的zoneName
awk两文件关联查询面试题解
需求说明
- 文件
a.txt含两个字段:userId、zoneId - 文件
b.txt含两个字段:zoneId、zoneName - 要求用awk工具输出
a.txt中每个userId对应的zoneName,逻辑等价于SQL中的a.txt LEFT JOIN b.txt
示例数据
a.txt内容
u001 z001 u002 z002 u003 z003
b.txt内容
z001 A z002 B z003 C
预期输出
u001 A u002 B u003 C
实现命令
awk -F' ' 'NR==FNR{a[$2]=$1;}NR!=FNR && a[$1] {print a[$1], $2}' a.txt b.txt
命令逻辑拆解
NR==FNR:NR为全局行号,FNR为当前文件的行号,该条件成立时代表正在处理第一个输入文件a.txta[$2]=$1:处理a.txt时,以zoneId(第2字段)为键,userId(第1字段)为值存入关联数组aNR!=FNR:该条件成立时代表正在处理第二个输入文件b.txta[$1]:校验b.txt当前行的zoneId(第1字段)是否在数组a中存在对应记录print a[$1], $2:匹配成功时输出对应的userId和zoneName(b.txt的第2字段)
内容的提问来源于stack exchange,提问作者Austin Deng
相关产品推荐
相关产品推荐

