练习 11:`uniq`
在最后两个练习的开始,没有什么可说的了。你应该知道如何思考你的工作环境,你如何开始,你如何坐下来,影响你开始的任何事情。你也应该使用这些小小的 45 分钟的项目,突破了起始状态。如果你还没有弄清楚,设置一个 45 分钟的计时器,并大喊“来干个痛快!” ,这是使自己开始的核心技巧。完成出色的工作的目标还没有完成,但是你已经起步了
你还应该有一个不错的实验笔记本,上面有运行图来描绘出你的改进效果如何。你的图表并不是非常科学,但是他们应该帮助你了解什么有用,什么没用。当你使用运行图时,你只需要在任一方向查找峰值,然后尝试为峰值找到“合理的原因”。如果峰值是有利的,那么试着找出原因并复现它。如果峰值是有害的,那么试着找出原因并防范于未然。
当我说“峰值”时,我的意思是重大变化。运行图应该是波动的。事实上,如果对于 45 分钟的 Hack,它保持不变,那也是坏的,你应该找出原因。正常流程在平均值周围波动和反弹,你应该只尝试找到任何一个方向的较大峰值的原因。如果你在以前的练习中进行了“深入学习”,则可以使用2 * std.dev
(两倍标准差)作为平均值上方和下方的线(俗称布林线),来发现问题。
注
运行图的更多演示请见此练习的视频(见原文)。它们在视频中更容易在视觉上解释。
挑战练习
uniq
命令仅仅接受sort
产生的,排序后的行,并移除重复。当你想要获得列表的非重复行时,这非常方便。如果你已经实现了这些命令,那么你应该可以这样做:
history | sed -e "s/^[ 0-9]*//g" | cut -d ' ' -f 1 | sort | uniq
history
命令打印出你运行过的每个命令的列表。你的sed
命令需要正则表达式,这将去掉history
命令的头部。接下来我用cut
来抓取第一个单词作为命令名称。之后,我通过uniq
排序并执行它,并且你需要拥有所有你执行的命令。
实现uniq
的足够功能,和任何其他必要的命令,使前面的命令工作。如果你的sed
无法处理表达式,你可以更改格式,但在完成此练习后,你应该可以得到一个命令列表。
研究性学习
- 你现在有一个的命令列表,你可以开始执行它,如果你想深入学习的话。
- 这是第一个多项目练习,其中你将之前步骤中的练习组合成一个练习。你有没有找到关于你的流程的新东西?
- 你的运行图怎么样?他们有帮助吗?
深入学习
研究 Python 的图表库,看看你是否可以用 Python 生成这些运行图。你还应该开始跟踪你需要花费多长时间来开始,看看运行图是否可以帮助你缩短所需时间。