编辑:找到了答案感谢詹姆斯布朗,有一个问题的方式,我格式化的命令:
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
你能给我指个方向吗?
非常感谢您的光临
3条答案
按热度按时间6qqygrtg1#
修复代码中的错误后:
输出为:
您也可以:
xzv2uavs2#
当然 , 它 不 起 作用 , 但 它 不 返回 任何 错误 ...
我 想 解释 一下 到底 发生 了 什么
中 的 每 一 个
第 一 件 事 是 将 字符 串
$2
乘以 字符 串$3
, 这 会 提示 GNU AWK 将 它们 都 转换 为 数字 , 如 How awk Converts Between Strings and Numbers 中 所 述 , 因为 整个 字符 串 或 任何 前缀 都 不是 有效 的 数字 , 以下 内容 适用无法 解 译为 有效 数字 的 字串 会 转换 为 零 。
所以 你 实际 上 得到 了 乘法
格式
得到 数字 0 , 然后 得到 以下 比较
格式
这 又 促使 字符 串 转换 为 数字 , 这 给出 了
0
, 因为0
是0,5
最 长 的 数字 构成 前缀 , 所以 最 后 我们 得到格式
它 永远 不 成立 , 所以 输出 为 空 。
ep6jt1vc3#