包含0的awk数组打印为空格

时间:2017-02-27 01:43:57

标签: arrays awk

为了说明我的问题,这是一个简单的例子:

cat file1.txt

user1
user2
user3
user4

cat file2.txt

user1 0
user2 3
user3 8
user6 9

awk 'NR==FNR { a[$1]=$2; next } { print $1, a[$1] ? a[$1] : "NA" }' file2.txt file1.txt

user1 NA
user2 3
user3 8
user4 NA

我需要在user1之后打印0,但它正在打印NA,好像user1没有退出file2.txt

我确信有一个简单的解决方案,但为什么会这样呢?

PS。我知道这里有grep -f解决方案,但我只是想知道我在数组中做错了什么。

1 个答案:

答案 0 :(得分:5)

零被认为是假的,所以你总会得到" NA"对于a[$1]为零的值。您需要将测试条件从简单的a[$1](如果它为零,将为假)更改为只有在数组中不存在的情况下才会出现错误。这应该有效:

print $1, ($1 in a ? a[$1] : "NA")

那只会打印" NA"如果完全没有从数组中删除密钥。