打印包含在初始分析中找到的最大值的所有行(行之间包含U+2500 Unicode字符)



我有一个问题在这里得到了回答awk-打印在初始分析中发现的包含最大值的所有行,但现在需要对其进行调整,以适应行之间有U+2500 unicode字符的情况。

问题如下,我有一个新的条目文件如下:

0.0008    6
────────────
9.0    10
────────────
9.0    19
────────────
0.7    33

如果我试图使用awk的答案找到最大值-打印包含初始分析中发现的最大值的所有行,输出总是如下所示:

──────
──────
──────

这不是预期的退出,但我应该得到这样的东西:

9.0    10
9.0    19

注意:创建此问题是为了不影响对标记为"的解决方案的选择;已解决";在awk中-打印包含初始分析中发现的最大值的所有行。

您也可以使用这个2遍awk:

awk '$1+0 != $1 {next} FNR==NR {if (max < $1) max=$1; next} $1 == max' file{,}
9.0    10
9.0    19

我们在第一阶段计算最大值,忽略$1为非数字的所有行,然后在第二阶段打印$1max值相同的所有记录。

使用您显示的示例,请尝试以下操作。用GNUawk编写和测试。

awk '
$1+0==$1{
max=(max>$1?max:$1)
arr[$1]=(arr[$1]?arr[$1] ORS:"")$0
}
END{
print arr[max]
}
'  Input_file

说明:添加对上述解决方案的详细说明。

awk '                                     ##Starting awk program from here.
$1+0==$1{                                 ##Checking condition if 1st field is an integer.
max=(max>$1?max:$1)                     ##Create max variable by having maximum value out of 1st field and max variable here.
arr[$1]=(arr[$1]?arr[$1] ORS:"")$0      ##Create array with index of $1 and keep adding its value to it wit same index values.
}
END{                                      ##Starting END block of this program from here.
print arr[max]                          ##Printing array arr value with key of max here.
}
'  Input_file                             ##Mentioning Input_file name here.

注:根据@karafka的建议,添加$1+0==$1,以便科学记数法,负数不会错过

相关内容

  • 没有找到相关文章

最新更新