shell 使用awk比较数字

rlcwz9us  于 2022-11-16  发布在  Shell
关注(0)|答案(3)|浏览(164)

编辑:找到了答案感谢詹姆斯布朗,有一个问题的方式,我格式化的命令:

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

你能给我指个方向吗?
非常感谢您的光临

6qqygrtg

6qqygrtg1#

修复代码中的错误后:

$ awk -F"," '{if($2*$3 > 0.5) print}' file

输出为:

2000,0.5,3
4000,1,3

您也可以:

$ awk -F, '$2*$3>0.5' file
xzv2uavs

xzv2uavs2#

当然 , 它 不 起 作用 , 但 它 不 返回 任何 错误 ...
我 想 解释 一下 到底 发生 了 什么

awk -F"," '{ if ("$2"*"$3" > "0,5") print "$line"}'

中 的 每 一 个
第 一 件 事 是 将 字符 串 $2 乘以 字符 串 $3 , 这 会 提示 GNU AWK 将 它们 都 转换 为 数字 , 如 How awk Converts Between Strings and Numbers 中 所 述 , 因为 整个 字符 串 或 任何 前缀 都 不是 有效 的 数字 , 以下 内容 适用
无法 解 译为 有效 数字 的 字串 会 转换 为 零 。
所以 你 实际 上 得到 了 乘法

0*0

格式
得到 数字 0 , 然后 得到 以下 比较

0 > "0,5"

格式
这 又 促使 字符 串 转换 为 数字 , 这 给出 了 0 , 因为 00,5 最 长 的 数字 构成 前缀 , 所以 最 后 我们 得到

0 > 0

格式
它 永远 不 成立 , 所以 输出 为 空 。

ep6jt1vc

ep6jt1vc3#

perl -F',' -lane'print if $F[1]*$F[2]>0.5' file

perl -lne'($a,$b)=((split/,/)[1,2]);print if $a*$b>0.5' file

相关问题