我试图计算的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中执行此操作。另外,如果可能的话,我想知道如何打印满足阈值的行。感谢您的帮助!
答案 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
(即中包含星号的字符串),则将其计为一场比赛。