根据具有纯awk

时间:2019-02-13 06:46:23

标签: awk exponential notation

我试图计算的Tab-del数据文件中的条目小于1e-5的e阈值,如下表所示。

  

col1 col2 col3 eval

     

entry1--1e-10

     

entry2---

     

entry3--0.001

我使用了以下代码:

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

这将输出:

$: 1

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

1 个答案:

答案 0 :(得分:1)

这可能是最好的方法:

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

这将执行以下操作:

  • ($4+0==$4) :首先要检查$4是否为数字。
  • ($4<1E-5) :第二个条件,用于检查值是否与范围匹配
  • && :如果两个条件都满足,则增加一个计数器c
  • END处,打印c的值

请注意,原始命令中的grep将失败。如果原始文件中的$4读为XXX1XXX(即其中包含数字的字符串)或XXX*XXX(即中包含星号的字符串),则将其计为一场比赛。