首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >awk语法'||‘没有'if’-它是如何工作的,为什么它会循环?

awk语法'||‘没有'if’-它是如何工作的,为什么它会循环?
EN

Stack Overflow用户
提问于 2020-11-28 04:42:45
回答 1查看 51关注 0票数 0

我一直在上大学的课,我们有一个关于awk的作业。其中一个练习是找出列的最低值,我偶然发现了这行代码:

代码语言:javascript
代码运行次数:0
运行
复制
awk 'NR == 1 || $3 < min {line = $0; min = $3}END{print line}' file.txt

如果读取的行数=1或第三列中的元素小于min,则设置line =正在读取的行,并设置min =第三列中的元素停止打印line

到目前为止,我只知道一些基本的||,我不理解python在这种情况下是如何工作的。我知道这是一个逻辑OR,但为什么没有if?

为什么它会在没有明确命令的情况下循环,比如while、until或for?

在if语句中,END是否等同于else

EN

回答 1

Stack Overflow用户

发布于 2021-04-04 03:23:39

正如@WilliamPursell提到的,该脚本由一个expression { action }列表组成。在处理完文件的所有行之后(之前为BEGIN ),特殊表达式END为真。AWK的工作方式是逐行读取文件(默认情况下),并针对每一行计算每条语句(您只有一条语句),并检查表达式是否为真。如果为真,则对操作进行评估。

NR是到目前为止读取的记录数,在本例中,记录是一行文本。由于AWK将为文件中的每一行计算语句NR == 1 || $3 < min {line = $0; min = $3},因此它将检查每一行表达式是否为真,即是否为NR == 1 (我们是在第一行吗?)或者如果$3 < min (第三个字段的值小于最小值,如果没有在第一行设置min,则隐式初始化为0),则使用具有最小值($0)和最小min本身的当前文本行更新line

OR (||)用于(1)初始化第一行上的最小值,或(2)用新的最小值更新它。

处理完所有文件后,我们使用print line输出包含最小值的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65043653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档