使用纯 awk 根据指数符号值计算条目

Count entries based on exponential notation values with pure awk

我正在尝试计算我的 tab-del 数据文件中小于 e 阈值 1e-5 的条目,该文件看起来类似于下面的 table。

col1 col2 col3 eval

entry1 - - 1e-10

entry2 - - -

entry3 - - 0.001

我使用了这个代码:

$: awk -F"\t" '{print }' table.txt | awk '( + 0) < 1e-5' | grep [0-9*] | wc -l 

这输出:

$: 1

虽然这可行,但我想将命令改进为纯 awk 的东西。我很想知道如何在 awk 中执行此操作。另外,如果可能的话,我想知道如何打印满足阈值的行。感谢您的帮助!

这可能是最好的方法:

awk -F"\t" '(+0==) && ( < 1E-5){c++}END{print c}' file

这会执行以下操作:

  • (+0==): 首先有条件地检查 </code> 是否是一个数字。</li> <li><strong><code>(<1E-5): 第二个条件检查值是否匹配范围
  • &&: 如果两个条件都满足,增加一个计数器 c
  • END处打印c
  • 的值

请注意,您在原始命令中的 grep 会失败。如果原始文件中的 </code> 读作 <code>XXX1XXX(即其中包含数字的字符串)或 XXX*XXX(即其中包含星号的字符串),它将被计为一场比赛。