我一直在上大学的课,我们有一个关于awk的作业。其中一个练习是找出列的最低值,我偶然发现了这行代码:
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
?
发布于 2021-04-03 19: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
输出包含最小值的行。
https://stackoverflow.com/questions/65043653
复制相似问题