Awk 关联数组

Awk 关联数组,awk,mapping,associative-array,Awk,Mapping,Associative Array,假设我有两个文件 文件-1 map.txt 1 tony 2 sean 3 jerry 4 ada 文件-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

假设我有两个文件

文件-1 map.txt

1 tony
2 sean
3 jerry
4 ada
文件-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]
附近出了什么问题


非常感谢您的帮助。

您创建地图的方法不对,需要:

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

您创建映射的方式不对,它需要:

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
使用awk

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

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

非常感谢paxdiablo。我发现如果我把名字改成数字,事情又会发生。例如:m.txt:12347826797872632 3 47653728 4 12676782 r.txt:2347826797872632 47653728 12676782 12676782 12676782 97872632 results.txt是:1 3 4感谢paxdiablo,我正试图将用户id(真正大的数字)映射到更小的整数,如1 2 3 4 5。我发现如果我把名字改成数字,事情又会发生。例如:m.txt:12347826797872632 3 47653728 4 12676782 r.txt:2347826797872632 47653728 12676782 12676782 12676782 97872632 results.txt是:1 3 4我试图将用户id(真正大的数字)映射到更小的整数,如1 2 3 4 5