从Shell提示符中计算mm:ss吗?

6
从shell提示符中,最少按键次数的方法是什么,以计算像4:33 + 0:20 - 2:45 = 2:08这样的表达式的mm:ss值?
这是用于交互式使用,而不是用于脚本、测量经过时间或任何类似的高级功能。没有鼠标。没有图形用户界面。
有成千上万的mm+60*ss(mmss/60, mmss%60)实现,涵盖了数百种语言。我可以在bash、ruby或C中编写一个脚本来实现这一点,添加另一个实现。但当它可能已经隐藏在bcdcirb甚至是bash本身中时,似乎不需要重新发明轮子。

我确信只用 bc 就有这样的实现,但是我想不起来了。我会跟进你问题中的答案。对于这个问题点赞。 - Arnab Nandy
bcibase 只能到 16,不能到 60 :-(。 - Camille Goudeseune
看起来用标准工具没有简单明了的方法来实现它。不嵌入 date -d 语句。 - deimus
如果您有安装第三方工具的机会,我建议使用 qalc 工具,它可以直接满足您的需求。 - deimus
@deimus,apt-get install qalc 很容易,但是它的少打几个键的时间计算器在哪里?文档是交互式的而不是可搜索的。(如果可能,请回答而不是评论。) - Camille Goudeseune
2个回答

3

虽然不完美:

s="4:33 + 0:20 - 2:45"
n=$(sed 's/\([0-9]*\):\([0-9]*\)/(\1 * 60 + \2)/g' <<< "$s" | bc)
printf "%d:%02d\n" $(( $n / 60 )) $(( $n % 60 ))

sed命令将(4 * 60 + 33) + (0 * 60 + 20) - (2 * 60 + 45)输出到bc。输出结果为:2:08

1
作为答案,我在.bashrc中提出了以下建议:tc() { n=$(sed 's/\([0-9]*\):\([0-9]*\)/(\1 * 60 + \2)/g' <<< "$1" | bc); printf "%d:%02d\n" $(( $n / 60 )) $(( $n % 60 )); } ```(我比/sbin/tc更常用。) - Camille Goudeseune
最好的方法是将$1替换为$@。这样,您就可以不用引号调用它,例如tc 4:33 + 20-2:45 - Camille Goudeseune

0

在提示符中使用一些字符计算时间是不可能的。

例如,您可以执行以下操作:

date -d "4:33 + 2:22" +%H:%M

但是,您需要包括时区(以及如何计算时间),获取输出后再次计算并且不超过24小时。所以这是荒谬的。

其中一个可能的解决方案是GNU/Units。它为一些常见组合提供了简写名称:

hms -> 小时,分钟,秒 time -> 年,天,小时,分钟和秒

您有:2小时+23分钟+32秒 您想要:秒 * 8612 / 0.00011611705

主页:http://www.gnu.org/software/units/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接