在我的面试中,面试官问了我一个关于awk的问题,我对此无能为力。
问题如下: 文件名a.txt
包含userId
和zoneId
,文件名b.txt
包含zoneId
和zoneName
。 要求:使用 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
感谢您的阅读。
我会按照以下方式为这项任务AWK
GNU,让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 中测试)