AWK关联数组

时间:2014-01-13 05:15:54

标签: awk mapping associative-array

假设我有2个文件

File-1 map.txt

1 tony
2 sean
3 jerry
4 ada

File-2 relation.txt

tony sean
jerry ada
ada sean

预期输出结果.txt

1 2
3 4
4 2

我的代码是:

awk 'FNR==NR{map[$1]=$2;next;} {$1=map[$1]; $2=map[$2]; print $0}' map.txt relation.txt > output.txt

但我只得到了左栏:

1
3
4

$2=map[$2]附近似乎出现了问题。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您的映射创建方式错误,需要:

map[$2] = $1

您当前的脚本将数字映射到名称,而您似乎想要的是从名称到数字的地图。

以下记录显示了更正后的脚本:

pax> cat m.txt
1 tony
2 sean
3 jerry
4 ada

pax> cat r.txt
tony sean
jerry ada
ada sean

pax> awk 'FNR==NR{map[$2]=$1;next;}{$1=map[$1];$2=map[$2];print $0}' m.txt r.txt
1 2
3 4
4 2

答案 1 :(得分:3)

使用awk。

awk 'FNR==NR{map[$2]=$1;next;}{print map[$1], map[$2]}' m.txt r.txt