# 練習 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