gpt4 book ai didi

awk - 仅当字段数大于 awk 的值时打印

转载 作者:行者123 更新时间:2023-12-05 01:23:39 25 4
gpt4 key购买 nike

我还是 awk 的新手,我做错了什么?很抱歉描述不当,我重新表述。

目标

如果数字 > 20,则只打印第二个字段的数字

lorem v3  <--- no print
ipsum v5 <--- no print
text v21 <--- print "21"
expla v12 <--- no print

我的尝试无效

awk ' { sub("^v","",$2); if ( $2 > 20 ) print $2 } '

最佳答案

解决 OP 关于为什么当前代码输出 3 的问题:

最初 awk 不知道 $2 是数字还是字符串。

sub() 调用(字符串函数)告诉 awk $2 将被视为字符串,这也意味着 $2 将被视为脚本其余部分的字符串。

这导致 $2 > 20 被视为字符串比较('3' > '20')并且因为 '3' (字符串)'大于''20'(字符串),输出 3

为了便于进行数字比较,我们需要一种方法来强制 awk$2 重新计算为数字。一种方法是添加一个零,即$2+0。对 OP 的当前代码进行此更改:

$ echo "lorem v3" | awk ' { sub("^v","",$2); if ( $2+0 > 20 ) print $2 } '
<<< no output

注意:有关更多详细信息,请参阅 GNU awk - variable typing


解决问题的最新变化:

示例输入:

$ cat input.dat
lorem v3
ipsum v5
text v21
expla v12

针对 input.dat 运行我们的 awk 代码(添加了额外的 print 以进行说明):

$ awk ' { print "######",$0; sub("^v","",$2); if ( $2+0 > 20 ) print $2 } ' input.dat
###### lorem v3
###### ipsum v5
###### text v21
21
###### expla v12

关于awk - 仅当字段数大于 awk 的值时打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72087314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com