【问题标题】:How can I compare floats in bash如何比较bash中的浮点数
【发布时间】:2018-08-15 04:18:33
【问题描述】:

正在编写脚本,我目前陷入困境。 (在这方面还是很新的)

首先我有我的数据文件,我正在里面搜索的文件。 第一个字段是姓名,第二个字段是已付款,第三个字段是欠款。

customerData.txt

 name1,500.00,1000
 name2,2000,100
 name3,100,100.00

这是我的 bash 文件。基本上,如果欠款金额大于支付金额,则打印姓名。适用于任何不是浮动的东西。我也知道 bash 不处理浮点数,处理它们的唯一方法是使用 bc 实用程序,但我没有运气。

#!/bin/bash

while IFS="," read name paid owe; do
    #due=$(echo "$owe - $paid" |bc -1)
    #echo $due
    if [ $owe -gt $paid ]; then
        echo $name
    fi
done < customerData.txt

【问题讨论】:

    标签: bash bc


    【解决方案1】:

    打印第三列大于第二列的所有行:

    $ awk -F, '$3>$2' customerData.txt 
    name1,500.00,1000
    

    工作原理

    • -F, 告诉 awk 列是用逗号分隔的。

    • $3&gt;$2 告诉 awk 打印第三列大于第二列的任何行。

      更详细地说,$3&gt;$2 是一个条件:它的计算结果为真或假。如果它评估为真,则执行该操作。由于我们没有指定任何动作,awk 执行的默认动作是打印该行。

    【讨论】:

    • 我使用的是 awk,但这实际上是针对一个更大的项目,我使用该文件中的数据来填写电子邮件模板上的内容。我想我可以使用 awk 并将整行打印到一个临时文件上,然后使用 while 访问该文件(它将具有所有正确的值)。
    • @Tursko 我不知道“在电子邮件模板上填写内容”的详细信息,但是因为 awk 支持printf,所以它能够打印复杂的输出。它还可以处理多个文件,例如,从一个文件中收集电子邮件地址,从另一个文件中选择债务人并将输出写入第三个文件。
    • 我使用 sed 将 之类的内容替换为我从文件中获取的名称。不过,您的解决方案确实对我有所帮助。
    • 因为 awk 具有内置的替换函数(如 sub 和 gsub),所以它可以做 sed 可以做的大部分事情。
    • 我会将您的答案标记为解决方案,因为它确实适用于我提出的问题。谢谢,我什至没有想过这样做。
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    相关资源
    最近更新 更多