【发布时间】:2016-02-02 23:33:08
【问题描述】:
我刚开始使用 bash,但在 bash 算术方面遇到了一些困难。假设我有一些城市有三个温度,我想在不使用 awk 命令的情况下平均温度。我怎样才能做到这一点?我已经用 awk 完成了,但我正在练习不同的技术。
# cityTemp.txt with four cities, three day's temperatures
Toronto 20 25 30
Miami 80 80 110
London 40 20 60
New York 5 10 15
假设我正在尝试编写一个脚本来输出:
25 Toronto
90 Miami
40 London
10 New York
我已经用一些管道和 awk 命令完成了这项工作,但我在不使用 awk 的情况下执行此操作时遇到了问题。
再说一次,我是新手。我尝试了一个 for 循环,但我真的不知道自己在做什么。
---编辑1:
Benjamin W. 我正在再次编辑,但现在我正在循环播放:
#!/bin/bash
for i in $(cat $1)
do
echo "i is: ${i}"
done < $1
很明显,这只是一次打印 cityTemp.txt 中的每个字段。
---编辑2:
这是我的结束尝试
while read -a rows
do
total=0
sum=0
for i in "${rows[@]}"
do
sum=`expr $sum + $i`
total=`expr $total + 1`
done
average=`expr $sum / $total`
Output = ${average}
done < $1
echo ${averages}
【问题讨论】:
-
你的 for 循环是什么样的?怎么没用?您可以edit您的问题添加一些信息。
-
感谢您的回复。我有一些事情要做,但没有什么是很有效的。我又来了。我之前尝试使用 expr(),但我很难只查看第 2、3、4 列
-
温度是否总是 3 个值,或者你需要一些东西来处理任意数量的温度
-
我只使用了 3 个值,但城市数量不同(始终格式化为:city temp temp temp),但如果您可以应用范围,我当然想学习。 --edit-- 我确实在那里放了一个邮政编码,我把它放在括号里,但我只得到了所有这些都可以使用 awk
-
您的最终版本依赖于这样一个事实,即字符串在算术上下文中被评估为零,因为您将所有城市名称视为数字;参看。
i=York; echo $(( i + 1 ))。它有效,但我不确定您是否知道发生这种情况。