包含0的awk数组打印为空白空间

Ris*_*ish 2 arrays awk

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

cat file1.txt

user1
user2
user3
user4
Run Code Online (Sandbox Code Playgroud)

cat file2.txt

user1 0
user2 3
user3 8
user6 9
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mar*_*eed 6

零被视为假,因此对于a[$1]零值,您将始终获得"NA" .您需要简单地更改测试条件a[$1](如果它为零则为false),如果它不在数组中则仅为false.这应该工作:

print $1, ($1 in a ? a[$1] : "NA")
Run Code Online (Sandbox Code Playgroud)

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