# 练习 11:`uniq`
> 原文:[Exercise 11: uniq](https://learncodethehardway.org/more-python-book/ex11.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
在最后两个练习的开始,没有什么可说的了。你应该知道如何思考你的工作环境,你如何开始,你如何坐下来,影响你开始的任何事情。你也应该使用这些小小的 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 生成这些运行图。你还应该开始跟踪你需要花费多长时间来开始,看看运行图是否可以帮助你缩短所需时间。
- 笨办法学 Python · 续 中文版
- 引言
- 第一部分:预备知识
- 练习 0:起步
- 练习 1:流程
- 练习 2:创造力
- 练习 3:质量
- 第二部分:简单的黑魔法
- 练习 4:处理命令行参数
- 练习 5:cat
- 练习 6:find
- 练习 7:grep
- 练习 8:cut
- 练习 9:sed
- 练习 10:sort
- 练习 11:uniq
- 练习 12:复习
- 第三部分:数据结构
- 练习 13:单链表
- 练习 14:双链表
- 练习 15:栈和队列
- 练习 16:冒泡、快速和归并排序
- 练习 17:字典
- 练习 18:性能测量
- 练习 19:改善性能
- 练习 20:二叉搜索树
- 练习 21:二分搜索
- 练习 22:后缀数组
- 练习 23:三叉搜索树
- 练习 24:URL 快速路由
- 第四部分:进阶项目
- 练习 25:xargs
- 练习 26:hexdump
- 练习 27:tr
- 练习 28:sh
- 练习 29:diff和patch
- 第五部分:文本解析
- 练习 30:有限状态机
- 练习 31:正则表达式
- 练习 32:扫描器
- 练习 33:解析器
- 练习 34:分析器
- 练习 35:解释器
- 练习 36:简单的计算器
- 练习 37:小型 BASIC
- 第六部分:SQL 和对象关系映射
- 练习 38:SQL 简介
- 练习 39:SQL 创建
- 练习 40:SQL 读取
- 练习 41:SQL 更新
- 练习 42:SQL 删除
- 练习 43:SQL 管理
- 练习 44:使用 Python 的数据库 API
- 练习 45:创建 ORM
- 第七部分:大作业
- 练习 46:blog
- 练习 47:bc
- 练习 48:ed
- 练习 49:sed
- 练习 50:vi
- 练习 51:lessweb
- 练习 52:moreweb