LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 594|回复: 7

如何比较两个非正数?[基本解决]

[复制链接]
发表于 2004-4-16 18:40:07 | 显示全部楼层 |阅读模式
例如比较99.4 和20,看谁大?
发表于 2004-4-16 18:47:27 | 显示全部楼层
  1. /home/javalee#a=99.4
  2. /home/javalee#b=20
  3. /home/javalee#awk 'BEGIN{if('$a'>'$b')print "a is big";else print "b is big"}'
  4. a is big
复制代码
 楼主| 发表于 2004-4-16 19:36:59 | 显示全部楼层
谢谢,不过这样一来很多后续命令就不好写了,我所希望的类似这样

if a > b , then command1
else command2

而这command1或者command2不是简单的print一类
发表于 2004-4-16 19:51:51 | 显示全部楼层
最初由 scopio 发表
谢谢,不过这样一来很多后续命令就不好写了,我所希望的类似这样

if a > b , then command1
else command2

而这command1或者command2不是简单的print一类

那需要先将浮点数四舍五入成整数再比较吧`
把浮点数转成整数:

  1. function f2f {
  2.     echo $1 | awk -F. "{if(\$2~/[5-9]/)print \$1+1;else print \$1}"
  3. }
复制代码
发表于 2004-4-16 20:55:36 | 显示全部楼层
if [ $(gawk 'BEGIN { if ('$a'> '$b') print "1"; }') ]
then
commad1
else
commad2
发表于 2004-4-16 21:00:48 | 显示全部楼层
最初由 scopio 发表
谢谢,不过这样一来很多后续命令就不好写了,我所希望的类似这样

if a > b , then command1
else command2

而这command1或者command2不是简单的print一类

呵呵,其实用awk也可以的:如:

  1. awk 'BEGIN{if('$a'>'$b')system("echo ok");else system("echo wrong")}'
复制代码

#如果a>b,那么在awk中调用system函数来执行UNIX命令,echo ok,否则,执行echo wrong,不就相当于你的:
  1. if [[ $a -gt $b ]];then
  2.     exec cmd1
  3. else
  4.     exec cmd2
  5. fi
复制代码
发表于 2004-4-16 21:02:57 | 显示全部楼层
最初由 waker 发表
if [ $(gawk 'BEGIN { if ('$a'> '$b') print "1"; }') ]
then
commad1
else
commad2

不错,利用了awk的返回的值来判断,:thank

  1. /home/javalee#cat bb
  2. a=$1
  3. b=$2
  4. var=$(awk 'BEGIN{if('$a'>'$b')print 0;else if('$a'<'$b')print 1;else print 2}')
  5. case $var in
  6. 0)      echo "$1 > $2";;
  7. 1)      echo "$1 < $2";;
  8. 2)      echo "$1 = $2";;
  9. esac
  10. /home/javalee#ksh bb 55.4 55
  11. 55.4 > 55
  12. /home/javalee#ksh bb 55.0 55.4
  13. 55.0 < 55.4
  14. /home/javalee#ksh bb 55.5 55.5
  15. 55.5 = 55.5
复制代码
 楼主| 发表于 2004-4-16 21:38:02 | 显示全部楼层
是哦是哦,我怎么没想到呢:) 谢谢两位:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表