假设我有两个文件:
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
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}
附近似乎有问题答案 0 :(得分:4)
awk -F"[, ]" 'NR==FNR {m[$3]=$1;next};{print m[$1]",",m[$3]}' map.txt relations.txt
答案 1 :(得分:1)
删除第2列中两个文件中的前导空格。
为了FS
而帮自己一个忙,转而使用除逗号以外的内容。 Tab char很好,因为大多数输入屏幕使用tab移动到下一个字段,因此它不应该在您的数据中。 |
字符很好,因为它是可视的,不太可能出现在你的输入中。
您可以构建一个“陷阱”来查找没有正确数量的字段的记录,如下所示:
awk -F"|" -v expectFldCnt=2 '{
if (NF==expectFldCnt) { print ":everything OK" ; }
else { print "ERR: " NF "!=" expectFldCnt ":" $0 > "errorFile" }
}' \
map.txt relation.txt
IHTH