AWK关联数组、映射或哈希映射

AWK关联数组、映射或哈希映射,awk,mapping,associative-array,Awk,Mapping,Associative Array,假设我有两个文件: file1-map.txt 1, 178246 2, 289789 3, 384275 4, 869282 file2-relation.txt 178246, 289789 384275, 178246 384275, 869282 预期结果如下: 1, 2 3, 1 3, 4 但我使用以下代码得到的结果是: awk 'FNR==NR{map[$2]=$1} {$1=map[$1];$2=map[$2];print $0}' map.txt relation.txt

假设我有两个文件:

file1-map.txt

1, 178246
2, 289789
3, 384275
4, 869282
file2-relation.txt

178246, 289789
384275, 178246
384275, 869282
预期结果如下:

1, 2
3, 1
3, 4
但我使用以下代码得到的结果是:

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

  2,
  1,
  4,
当我像这样交换map.txt中的列时,它感到困惑:

178246, 1
289789, 2
384275, 3
869282, 4
awk -F"|" -v expectFldCnt=2 '{
   if (NF==expectFldCnt) { print ":everything OK" ; }
    else { print "ERR: " NF "!=" expectFldCnt  ":" $0 > "errorFile" }
    }' \
  map.txt relation.txt
relation.txt不会更改

结果是:

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

1,
3,
3,

似乎在{$1=map[$1];$2=map[$2];print$0}附近出现了问题

请删除第2列中两个文件的前导空格

帮你自己一个忙,把
FS
换成逗号以外的符号。Tab字符很好,因为大多数输入屏幕使用Tab移动到下一个字段,所以它不应该出现在数据中。
|
字符很好,因为它是可视的,不太可能出现在您的输入中

您可以构建一个“陷阱”来查找字段数不正确的记录,如下所示:

178246, 1
289789, 2
384275, 3
869282, 4
awk -F"|" -v expectFldCnt=2 '{
   if (NF==expectFldCnt) { print ":everything OK" ; }
    else { print "ERR: " NF "!=" expectFldCnt  ":" $0 > "errorFile" }
    }' \
  map.txt relation.txt
IHTH

awk-F“[,]”NR==FNR{m[$3]=1;next};{print m[$1]“,”,m[$3]}'map.txt relations.txt

如果我使用tony、jerry、frank等实名而不是uid 178246、289789等,我的代码工作得很好,我不知道为什么当我使用数字而不是字符串作为关联数组的索引时它不工作!它起作用了。我使用“|”而不是“,”并且它工作得非常好。非常感谢你Sheller.我怎么给你一个答案分数?哈哈,回答得不错