AWK关联数组,映射(AWK associative array, mapping)

2019-10-19 05:35发布

假设我有两个文件:

文件1 - 的map.txt

1, 178246
2, 289789
3, 384275
4, 869282

文件2 - 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

relation.txt不会改变

结果变成了:

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

1,
3,
3,

这似乎有些不对劲附近{$ 1 =地图[$ 1]; $ 2 =地图[$ 2];打印$ 0}

Answer 1:

2栏删除这两个文件中领先的空间。

并请你帮个忙,并切换到的东西,除了逗号为FS 。 标签char是一件好事,因为大多数输入屏幕使用选项卡移动到下一个字段,所以它不应该在你的数据。 该| char是不错的,因为它是视觉和不太可能在你的输入。

你可以建立一个“陷阱”查找记录不喜欢这个领域的权数:

awk -F"|" -v expectFldCnt=2 '{
   if (NF==expectFldCnt) { print ":everything OK" ; }
    else { print "ERR: " NF "!=" expectFldCnt  ":" $0 > "errorFile" }
    }' \
  map.txt relation.txt

我ःŤः



Answer 2:

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


文章来源: AWK associative array, mapping