如何忽略负数

如何忽略负数

让我们考虑下面的例子

1 4.0 3.5 7.2
2 3.2 2.5 5.2
3 1.7 -1.8 2.9
4 4.1 2.5 5.7

如何通过忽略负数来提取表的第三列?

如果我使用awk '{print $3}' filename,它会给我所有四个数字。但我只想取正数,即最终输出必须是三个数字:

3.5
2.5
2.5

我怎样才能做到这一点?

答案1

假设输入是纯数字,如问题所示:

awk '$3 >= 0 { print $3 }' file

块前面的测试决定块是否会运行。在这种情况下,测试是算术测试,将是真的如果第3字段的数据是非负数。在这种情况下,将输出该字段。

答案2

可以将第三列视为数字或字符串。awk如果上下文需要,则具有从字符串到数字的隐式转换,非数字值等于零并且非数字后缀被忽略。

在此解决方案中,没有数字比较。检查该字符串以查看它是否不以减号 开头,-并且仅在这样的情况下输出:

awk '$3 !~ /^-/ {print $3}' filename

(此解决方案将跳过以 开头的值,-即使它不是负数。例如--00。修改 RE 或强制进行数字比较可能会解决这个问题。如果您只有数字值,则不会出现此问题。)

答案3

awk '$3 ~/^[0-9]/{print $3}' file.txt 

输出

3.5
2.5
2.5

相关内容