使用Awk关联键文件匹配列取值失败,求助排查问题
AWK匹配失败问题解决
问题场景
主文件(file)内容:
name1 na 1002 name2 na 1002 name3 na 1003
键文件(key)内容:
1002 1 1003 2
期望将主文件第三列与键文件第一列匹配,在主文件行尾追加键文件对应的第二列,得到输出:
name1 na 1002 1 name2 na 1002 1 name3 na 1003 2
但执行以下AWK命令后,仅输出主文件原内容,未追加对应的值:
awk 'FNR==NR {a[$1]=$2;next} $3 in a {print $0,a[$1]}' key file
错误原因
核心错误是数组索引不匹配:
- 处理键文件时,你把键文件的第一列(
$1,即1002、1003)作为数组a的键,存储对应第二列的值。 - 处理主文件时,你正确用主文件第三列(
$3)判断是否在数组中,但取值时错误使用了a[$1]——主文件的$1是用户名(如name1),并非键文件中的数字键,所以a[$1]为空,导致没有内容输出。
修正后的命令
将取值部分的a[$1]改为a[$3],对应主文件中用来匹配的第三列:
awk 'FNR==NR {a[$1]=$2;next} $3 in a {print $0,a[$3]}' key file
执行结果
运行修正后的命令,将得到预期的输出结果:
name1 na 1002 1 name2 na 1002 1 name3 na 1003 2
内容的提问来源于stack exchange,提问作者Ascaris
相关产品推荐
相关产品推荐

