为了说明我的问题,这是一个简单的例子:
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
解决方案,但我只是想知道我在数组中做错了什么。
答案 0 :(得分:5)
零被认为是假的,所以你总会得到" NA"对于a[$1]
为零的值。您需要将测试条件从简单的a[$1]
(如果它为零,将为假)更改为只有在数组中不存在的情况下才会出现错误。这应该有效:
print $1, ($1 in a ? a[$1] : "NA")
那只会打印" NA"如果完全没有从数组中删除密钥。