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

标签 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;下一个 } { 打印 $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 解决方案,但我只是想知道我在数组中做错了什么。

最佳答案

当将表达式作为 bool 条件求值时,AWK 会将数值为零的字符串视为,因此对于关联编号为 0 的用户,您始终会得到“NA”。(空字符串也是如此,如果用户在 file2.txt 中列出且其姓名后面根本没有数字,则该空字符串将出现在数组中。)

要可靠地打印 file2.txt 中的所有数字,您需要更改依赖于 a[$1] 的的测试条件 改为仅检查数组中$1是否存在。这应该有效:

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

如果数组中完全缺少 key ,则只会打印“NA”。

关于arrays - 包含 0 的 awk 数组打印为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42476549/

相关文章:

arrays - 检索 jq 结果作为一个列表对象,而不是一串成员

javascript - 从数组中查找 parent 和 child

linux - while 循环中的 awk 命令问题

regex - 带变量的 AWK 负正则表达式

linux - 如何在 awk 中使用 bash 命令

linux - Sed/awk - 如何删除开始模式和结束模式之间的换行符。

PHP 数组搜索

C++ 数组索引

Java:在我的程序中将文件数据转换为可用数据时遇到问题。有小费吗?

bash - 在 awk 中使用 shell 变量