使用纯 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
(即其中包含星号的字符串),它将被计为一场比赛。
我正在尝试计算我的 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
(即其中包含星号的字符串),它将被计为一场比赛。