awk - awk 如何否定条件
问题描述
我试图在 awk 中计算一些东西,最后按输入的顺序打印结果。对于每一行,我检查它是否还没有被看到。如果没有,我将其添加到数组中并将其存储在order
数组中。
{
if (! $0 in seen) {
seen[$0] = 1
order[o++] = $0
}
} END {
for (i=0; i<o; i++)
printf "%s\n", order[i]
}
你可以试试
printf 'a\nb\na\nc\nb\na\n' | awk script_above
它什么也不打印。如果我在最后打印变量o
,它表明它的值仍然是 0。我做错了什么?
解决方案
您只需要添加括号即可获得正确的运算符优先级*:
# a.awk
{
if (!($0 in seen)) {
seen[$0] = 1
order[o++] = $0
}
}
END {
for (i=0; i<o; i++)
printf "%s\n", order[i]
}
测试:
$ awk -f a.awk file
a
b
c
*(一元!
比运算符绑定更紧密in
:https ://www.gnu.org/software/gawk/manual/html_node/Precedence.html )
推荐阅读
- list - 如何在 Python 中将所有对象添加到列表中而不在 for 循环之前使用空列表?
- c++ - 为什么以下两个代码片段会导致 MSVC 的编译输出不同,而 gcc 的编译输出相同?
- android - kotlin-stdlib-jdk 依赖的目的是什么?
- mysql - 如何在 docker 上远程访问 mariadb?
- c# - 对象属性上的自定义扩展方法以返回 DefaultValue
- node.js - Heroku 在构建结束时没有显示我的应用程序
- python - Python:如何在使用 dynamodb 排序后获得位置/排名?
- c - 如何在不使用任何内置函数的情况下将整数转换为 c 字符串,反之亦然和其他数据类型?
- excel - 隐藏 For 循环中每个实例发生的保存窗口
- php - Symfony 5, How to display in a template, a variable where the current user is affiliated with a ManyToMany relations