打字速度有多快?用 Bash 开发一个小型实用工具来 выяснить

作者:Emre Sevinc

如果您的大部分时间都花在键盘上打字(我希望您不要太频繁地使用鼠标,如果您关心您的手腕的话),那么提高打字速度并练习成为更好更快的打字员是非常值得时间和精力的。而衡量是改进的第一步。

有很多应用程序可以测试您的打字能力并帮助您提高,但是如果只使用古老的 Bash 就能对您的打字表现有一个基本的了解,那岂不是很好?毕竟,这关于 DIY(自己动手)方法和乐趣;这两个概念 Linux Journal 的读者非常清楚。

这个想法实际上非常简单:测量打字速度基本上意味着测量您在给定的时间内打了多少个单词。最常用的单位之一是 wpm(每分钟字数)。也许不是很准确和科学,但我们的目标是得到一个大概的数字,所以一些近似的测量对于我们的目的来说就足够了。基于这些信息,我们可以写出公式:

typing_speed_in_wpm = num_words / ( (end_time - start_time) / 60 )

现在我们已经建立了理论框架,是时候构建项目的实际计算部分了。在深入代码之前,让我们将上面的公式分解成几部分,看看哪些 GNU/Linux 实用程序可以帮助我们完成各种任务

  • date:这是我们熟知的实用程序,如果您使用 %s 格式说明符,它将返回“自 1970-01-01 00:00:00 UTC 以来的秒数”。因此,如果您在打字会话开始时和结束时分别运行一次 date +%s,您将得到 end_time 和 start_time。
  • wc:这是另一个著名的实用程序,如果使用 -w 选项调用它,它可以为您提供文件中的单词数。请记住,在 GNU/Linux 中,几乎一切都是文件,包括您从键盘的输入。
  • cat:官方来说,它连接文件并将它们打印到标准输出。实际上,它可以从键盘获取您的输入,并通过管道将其发送到 wc。换句话说,我们只需发出以下命令即可计算刚刚键入的单词数:cat | wc -w
  • bc:官方来说,它是一种任意精度计算器语言。实际上,如果您想在命令行中进行计算,它是一个非常方便的实用程序。但是您必须小心并阅读其手册页。为什么?好吧,如果您尝试这些
$ echo 1 + 1 | bc
2

一切似乎都很好,但是如果您尝试以下操作

$ echo 1 / 2 | bc
0

这不是您期望计算机返回的结果。为什么它没有返回正确的答案,即 0.5?根据其手册页,“scale 定义了一些操作如何使用小数点后的数字。scale 的默认值为 0。” 显然,对于我们稍后将使用的除法运算来说,这不是一个非常明智的默认值。那么解决方案是在进行操作之前告诉 bc 要使用的 scale,例如:

$ echo “scale=2; 1 / 2” | bc
0.50

这样就好多了。我们已经准备好了所有组件,现在是时候使用我们最喜欢的应用程序开发环境 Bash 将它们粘合在一起了

1  #!/bin/sh
2  # speed.sh: a very tiny utility to measure typing speed.
3  prompt="Start typing a piece of text. Press Ctrl-d twice to
finish."
4  echo "\n$prompt \n"
5  start_time=`date +%s`
6  words=`cat|wc -w`
7  end_time=`date +%s`
8  speed=`echo "scale=2; $words / ( ( $end_time - $start_time ) / 60
)" | bc`
9  echo "\n\nYou have a typing speed of $speed words per minute."

如果您将上面的 shell 脚本另存为 speed.sh 并使其可执行,那么您就可以测量您的打字速度了。哦,我忘记了一件事,那就是要打字的一段文本。最好总是准备好一些文本,这样您就会知道自己要打什么。在这种情况下,我更喜欢 Linus Torvalds 宣布 Linux 诞生的 Usenet 消息 的前几行

$ ./speed.sh

开始键入一段文本。按 Ctrl-d 两次以完成。

Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready.

You have a typing speed of 43.33 words per minute.

嗯,每分钟 43.33 个单词肯定不是世界纪录(而且我肯定有更好的分数,相信我!)。根据 相关的维基百科文章,“截至 2005 年,作家 Barbara Blackburn 是世界上最快的英语打字员,根据《吉尼斯世界纪录大全》。使用德沃夏克简化键盘,她保持了每分钟 150 个单词 (wpm) 的速度 50 分钟,以及每分钟 170 个单词的速度在较短的时间内。她的峰值速度被记录为每分钟 212 个单词。” 我不知道,也许是时候切换到德沃夏克简化键盘了,但我对此表示怀疑。

上面的小型实用程序帮助我对我的打字速度有了一个大致的了解。当然,它缺少一些重要的功能。如果它能做到以下几点就更好了:

  • 它包含各种文本并以随机顺序显示它们,以便可以计算不同打字会话的平均表现。在进行此类基准测试时,单次测量很难成为可靠的指标。
  • 它具有从文件中获取示例文本的选项。
  • 它考虑了打字员犯的错误数量。这需要一个小函数来比较示例文本和打字员的输入。如果您的表现是每分钟 1000 个单词,但其中 90% 包含可怕的错误、错别字等,那意义不大。

以上三点留给 Linux Journal 的读者作为练习。

祝您黑客愉快,打字愉快。

Emre Sevinç 目前担任软件开发人员和研究员。自 1994 年他在伊斯坦布尔技术大学数学系首次接触 GNU/Linux 以来,他就一直参与其中。

加载 Disqus 评论