Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中比较浮动_Bash_Bc - Fatal编程技术网

如何在bash中比较浮动

如何在bash中比较浮动,bash,bc,Bash,Bc,正在编写脚本,我现在被卡住了。(这方面还是很新的) 首先,我有我的数据文件,我在里面搜索的文件。 第一个字段是名称,第二个字段是已付款,第三个字段是欠款 customerData.txt name1,500.00,1000 name2,2000,100 name3,100,100.00 这是我的bash文件。基本上,如果欠款金额大于已付金额,则打印姓名。适用于任何不是浮动的东西。我也知道bash不处理浮动,处理浮动的唯一方法是使用bc实用程序,但我运气不好 #!/bin/bash wh

正在编写脚本,我现在被卡住了。(这方面还是很新的)

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

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
#/bin/bash
当IFS=“,”时,读取支付的姓名;做
#到期=$(回显“$欠-$付”| bc-1)
#回音$到期
如果[$欠款-gt$已付];然后
echo$name
fi
完成
要打印第三列大于第二列的所有行:

$ awk -F, '$3>$2' customerData.txt 
name1,500.00,1000
工作原理
  • -F,
    告诉awk列是逗号分隔的

  • $3>$2
    告诉awk打印第三列大于第二列的任何行

    更详细地说,
    $3>$2
    是一个条件:它的计算结果为true或false。如果计算结果为true,则执行该操作。由于我们没有指定任何操作,awk执行默认操作,即打印行


我使用的是awk,但实际上这是一个更大的项目,我使用此文件中的数据在电子邮件模板中填充内容。我想我可以使用awk将所有行打印到一个临时文件上,然后使用while访问该文件(该文件将具有所有正确的值)。@Tursko我不知道“在电子邮件模板上填写内容”涉及的细节,但是,因为awk支持
printf
,所以它能够打印复杂的输出。它还可以处理多个文件,比如从一个文件中收集电子邮件地址,从另一个文件中选择债务人,并将输出写入第三个文件。您的解决方案确实对我有帮助。因为awk有内置的替换函数(如
sub
gsub
),它可以做sed能做的任何事情。我将把您的答案标记为解决方案,因为它确实适用于我提出的问题。谢谢你,我都没想过要这么做。