【问题标题】:How to use awk tool to associate two files for query?如何使用awk工具关联两个文件进行查询?
【发布时间】:2021-11-07 17:02:13
【问题描述】:

面试的时候,面试官问了我一个关于awk的问题,我也无能为力。

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

例如:

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

感谢阅读。

【问题讨论】:

标签: awk


【解决方案1】:

我会 GNU AWK 按照以下方式完成此任务,让 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。收集数据后,我为user 中的每个键print 检索该键并从user 检索zoneId,然后我用它检索zoneName

(在 GNU Awk 5.0.1 中测试)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多