LinuxSir.cn,穿越时空的Linuxsir!

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

关于几个数相加的问题

[复制链接]
发表于 2007-11-14 09:58:36 | 显示全部楼层 |阅读模式
我有一个文件 num.txt
23
34
56
55
67
123
22
如果要把该文件中的这些数相加,并且将结果赋予另外一个变量,要怎么实现.
谢谢
!
发表于 2007-11-14 10:29:31 | 显示全部楼层
for i in $(<num.txt)
do
   ((s+=i))
done
echo $s
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-14 11:29:20 | 显示全部楼层
谢谢指点 谢谢^_^
不知道为什么 我的不识别((s+=i)) 运算 只能改成下边的样子......

#!/bin/sh
s=0
for j in `more num.txt`
do
s=`expr $s + $j`
done
echo $s
回复 支持 反对

使用道具 举报

发表于 2007-11-14 12:24:15 | 显示全部楼层

  1. $   cat a.txt
  2. 23
  3. 34
  4. 56
  5. 55
  6. 67
  7. 123
  8. 22
  9. $   echo "$(tr '\n' '+' < a.txt)0" | bc
  10. 380
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-14 13:14:55 | 显示全部楼层
to: huan  
你写的代码太帅了  
刚开始学shell  为了不让我唯一的一点信心破灭
解释下吧  最好每个都解释到  谢谢
  echo "$(tr '\n' '+' < a.txt)0" | bc
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-14 13:15:37 | 显示全部楼层
to: huan  
你写的代码太帅了  
刚开始学shell  为了不让我唯一的一点信心破灭
解释下吧  最好每个都解释到  谢谢 或有其他高手解释下也可以 不慎感激
  echo "$(tr '\n' '+' < a.txt)0" | bc
回复 支持 反对

使用道具 举报

发表于 2007-11-14 13:35:41 | 显示全部楼层
to sgar
把代码分解后运行一次就可以明白

把换行符换成 ‘+’, 也就是把所有数字用加号连在一起并传给bc计算

  1. samli@vm1:~/tmp$ tr '\n' '+' < a.txt
  2. 23+34+56+55+67+123+22+    //这里没有换行
  3. samli@vm1:~/tmp$ echo $(tr '\n' '+' < a.txt)0
  4. 23+34+56+55+67+123+22+0  //最后补0, 否则bc报错
  5. samli@vm1:~/tmp$ echo $(tr '\n' '+' < a.txt)0 | bc    //传给bc做计算
  6. 380
复制代码


实际上我的回复并不合适,可能误导初学者的学习
初学编程应该一步一步把基础打好
到一定程度后自然会水到渠成
回复 支持 反对

使用道具 举报

发表于 2007-11-14 16:23:27 | 显示全部楼层
用tr+bc的想法很赞!
回复 支持 反对

使用道具 举报

发表于 2007-11-15 15:18:25 | 显示全部楼层
我也来凑一个:
awk '{sum+=$1} END{print sum} ' num.txt
回复 支持 反对

使用道具 举报

发表于 2007-11-15 20:34:51 | 显示全部楼层
赞! 确实很妙的说! 又学习了!

唉, 学习的时候走马观花, 后悔呀!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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