【发布时间】:2022-11-01 14:05:04
【问题描述】:
编辑:感谢詹姆斯布朗找到了答案,我格式化命令的方式存在问题:
awk -F"," '{ if ($2*$3 > 0.5) print }'
正在工作中。
我有一个这样的文件:
1000,0.5,1
2000,0.5,3
4000,1,3
5000,0.2,1
我需要将每行的 $2 和 $3 相乘,并检查结果是否优于 0.5。 我读到 -gt 运算符无法处理浮点数,而 awk 可以做到。
这是我能想到的最好的:
cat awk.txt | awk -F"," '{ if ("$2"*"$3" > "0,5") print "$line"}'
当然,它不起作用,但它不会返回任何错误......
预期结果:
5000,0.2,1
你能为我指出正确的方向吗?
非常感谢
【问题讨论】:
-
"$2"是文字字符串$2,而不是第二个字段的值,"$line"和"0,5"也是如此 - 还要注意你有逗号,这不是小数分隔符。要print行,只需使用print。另外,不需要cat file,awk 可以处理带有awk '...' file的文件。 -
猫awk.txt | awk -F"," '{ if ($2*$3 > "0,5") print }' 正在工作,感谢 James Brown。
-
awk 不是 shell,它是一种完全不同的语言,就像 C 一样,有自己的语法和语义。
-
关于
EDIT: found the answer...- 不,那个脚本awk -F"," '{ if ($2*$3 > "0,5") print }'是在进行字符串比较,而不是数字比较。您得到预期输出的事实只是巧合,尝试echo 11 | awk '{ if ($1 > "2") print }',您会看到它什么也没输出。您还在该代码中使用,作为小数点,但在数据中使用.- 您的语言环境中的小数点不能同时是逗号和句点。 -
你是对的,这是因为我们在法语中使用“0,5”而不是“0.5”。