免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 47350 | 回复: 18
打印 上一主题 下一主题

shell 的除法运算 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-02 09:42 |只看该作者 |倒序浏览
shell 中的两个变量$total 和$num, 求平均值,保留小数点后两位。

ave=`expr $total / $num` 这个表达式是不对的,为什莫?

搜索功能暂不能用。请大侠指教。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-04-02 10:00 |只看该作者

shell 的除法运算

没问题,重新输入一遍试试看!

论坛徽章:
0
3 [报告]
发表于 2004-04-02 10:13 |只看该作者

shell 的除法运算

留小数点后两位还是用bc吧:

ave=`echo "scale=2;$total/$num"|bc`

论坛徽章:
0
4 [报告]
发表于 2004-04-02 10:18 |只看该作者

shell 的除法运算

变量定义省。。。

if [ -s $INPUT_FILE ]; then
    num=0
    while read LINE
      do
      total=`awk '$1~/^[^#]/ {print}' $CAL_FILE | wc -l`
      num=`awk '/^'"$LINE"'/ {print}' $CAL_FILE | wc -l`
      rate=`expr $num / $total` ## 行不通!!
      #rate=`expr $num / 551`  ## 连此行也无法得到结果
     echo "$LINE\t$num\t$rate" ## 最后一项($rate)为零,为什莫??

    done < $INPUT_FILE
fi

论坛徽章:
0
5 [报告]
发表于 2004-04-02 12:12 |只看该作者

shell 的除法运算

好像有可能是由于

total=`awk '$1~/^[^#]/ {print}' $CAL_FILE | wc -l`
num=`awk '/^'"$LINE"'/ {print}' $CAL_FILE | wc -l`

这两句的输出格式的问题,他们的输出格式并不是以结果的数字开头,有一些类似于<table>,<space>...的东西打头。但是好像用单纯的去掉空格的方法行不通。

论坛徽章:
0
6 [报告]
发表于 2004-04-02 12:14 |只看该作者

shell 的除法运算

echo一下脚本中生成的各个变量,看哪个变量有问题

论坛徽章:
0
7 [报告]
发表于 2004-04-02 12:28 |只看该作者

shell 的除法运算

试过了。各个变量都得到了正确的结果。说是正确,实际并不像一般的文本文件,例如

551

而是

     551      # 551数字之前有空位,但不清楚是<space>,还是<table>, etc.

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
8 [报告]
发表于 2004-04-02 12:32 |只看该作者

shell 的除法运算

是wc在作怪

论坛徽章:
0
9 [报告]
发表于 2004-04-02 12:38 |只看该作者

shell 的除法运算

[quote]原帖由 "r2007"]是wc在作怪[/quote 发表:

of course
  1. $ls -l|wc -l
  2.      14
  3. $ls -l|wc -l|tr -d ' '
  4. 14
复制代码

论坛徽章:
0
10 [报告]
发表于 2004-04-02 13:01 |只看该作者

shell 的除法运算

谢谢楼上的各位高手。我用awk也去掉了wc前面的东东。

total=`awk '$1~/^[^#]/ {print}' $CAL_FILE | wc -l|awk '{print $1}'`
num=`awk '/^'$LINE'/ {print}' $CAL_FILE | wc -l|awk '{print $1}'`

可是,输出的 rate=`expr $num / $total`仍然为零。真是摸不到头脑。

现将全部文件写出
------topicDB.sh------
#!/bin/sh

INPUT_FILE=model.txt
CAL_FILE=topicDB.txt

if [ -s $INPUT_FILE ]; then
    num=0
    total=`awk '$1~/^[^#]/ {print}' $CAL_FILE | wc -l|awk '{print $1}'`
    while read LINE
      do
      num=`awk '/^'$LINE'/ {print}' $CAL_FILE | wc -l|awk '{print $1}'`
      echo "$total"
      echo "$num"
      rate=`expr $num / $total` #保留两位小数或变为百分比形式。
      echo "$rate"
    done < $INPUT_FILE
fi
------model.txt--------
&amp;
&amp;
&amp;
a
b
br
center
dd
div
dl
dt
font
h3
hr
img
li
ol
p
pre
span
strike
strong
sup
table
tbody
td
tr
ul
-------topicDB.txt--------
#---200403---
a
p
div
strong
br
div
strong
&amp;
a
a
a
&amp;
a
dl
dt
dd
p
a
a
a
a
#---200402---
a
a
dl
dt
dd
p
a
a
#---200401---
a
p
ul
li
a
strong
br
p
ol
li
dl
dt
dd
ul
a
a
br
br
a
p
ul
li
a
&amp;
a
strong
hr
a
&amp;
a
a
#---200312---
p
br
ol
li
a
strong
p
a
a
a
a
a
a
p
a
&amp;
#---200311---
br
a
strong
p
span
h3
&amp;
...
...


运行的结果是
551
1
0
551
2
0
551
46
0
551
148
0
551
68
0
...
...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP