让我们考虑下面的例子
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