如何使用awk工具关联两个文件进行查询?



在我的面试中,面试官问了我一个关于awk的问题,我对此无能为力。

问题如下: 文件名a.txt包含userIdzoneId,文件名b.txt包含zoneIdzoneName。 要求:使用 awk 工具打印出 a.txt 的用户 ID 所属的区域名称。

例如:

a.txt像这样:

u001 z001
u002 z002
u003 z003

b.txt像这样:

z001 A
z002 B
z003 C

打印结果如下:

u001 A
u002 B
u003 C

非常感谢您的回答!


这个问题的意思是让我们使用两个文件作为内部链接。

就像在SQL中这样:a.txt inner left join b.txt

我查找信息并认为以下是一个理想的答案:

awk -F' ' 'NR==FNR{a[$2]=$1;}NR!=FNR && a[$1] {print a[$1], $2}' a.txt b.txt

感谢您的阅读。

我会按照以下方式为这项任务AWKGNU,让a.txt内容

u001 z001
u002 z002
u003 z003

b.txt内容

z001 A
z002 B
z003 C

然后

awk 'FILENAME=="a.txt"{user[$1]=$2}FILENAME=="b.txt"{zone[$1]=$2}END{for(i in user){print i,zone[user[i]]}}' a.txt b.txt

输出

u001 A
u002 B
u003 C

说明:我从文件a.txt中的数据创建数组user,从文件b.txt中的数据创建数组zone,因此提供userId作为user的键将导致相应的zoneId,提供zoneId作为zone的键将导致相应的zoneName。收集数据后,我print该密钥中的每个键user并从user中检索zoneId,然后我用它来检索zoneName

(在 GNU Awk 5.0.1 中测试)

最新更新