用命令行去發掘有趣的「前十」
在這篇文章中,我將基於GNU/Linux工具和'單列表格'(也就是我所說的簡單列表)來做一些數據探索。如若想在這裡通過命令行查看更多的信息,請查看'man'頁,或者在「注釋」部分求解。
密碼
在第一個列表裡探討的是馬克.伯內特2011著的關於10000 個最常用的密碼彙編。這個列表是有序的、使用最頻繁的,也是廣為人知的階乘「密碼」的最常用來源之一,與「123456」並列排名第二。在這裡,我把該列表放到一個名為「passwords」的文件中,並且使用head命令把排名前10的列出來了:
(伯內特解釋他是如何收集這些密碼的這裡。你會注意到在列表中他把所有大寫字母都轉換成小寫的。)
OK,所以'password'是伯內特列表的頂部。那麼每個數字呢?
非常有趣的是!數字'1'出現在密碼列表中的次數多於第二個最常用數字'2'的兩倍,而且,除了0和9之外,這十個數字出現的次數以其數字順序排列。而排名前10的字母呢?
在 passwords 文件中出現最頻繁的字母依次是EARONISTLC,類似於EAIRTONSLC,這是至少一個出版的表格中提到的常用英文單詞中出現的字頻。這是否意味著,大部分密碼其實是一些常見的英語單詞呢,也許會參雜一些數字呢?
為了找到答案,我先把密碼轉換成一個純字母的字元串列表,然後看看有多少字元串是可以在英語詞典中找到的。
首先我將通過 sed 命令刪除所有密碼中的數字,然後刪除所有的標點符號,再刪除所有的空行。這將創建出一個純字母的密碼列表。然後我通過sort 和 uniq來修剪列表的排序,將重複項取出。(例如,'abc1234def'和'abc1!2!3!def!'都剔除剩下'abcdef'.) 。根據wc命令,我把1000個密碼減至成8583個純字母的字元串:
我經常使用一本攜帶型的英語字典,我通常會使用usr/share/dict/american-english,這個文件是來自Debian Linux的一個發行版本。它包含了99171個單詞。我會先通過tr命令將這個詞錶轉換為純小寫的,然後使用sort 和 uniq刪除掉任何重複的條目排序(例如'A' 和 'a' 都將成為 'a')。這樣就將詞表的數量減至97723項了:
我現在可以用comm命令及'-23'的參數來比較兩個列表,並報告純字母文件中而沒有出現在字典中的單詞:
總數是3137,所以至少有8583 -3137 = 5446個'核心'密碼在伯納特的純小寫字母列表中(大約63%)是簡單的英語單詞,或者是簡單的單詞附加一些數字或者標點符號。我之所以說「至少」,是因為在3137個字元串中有很大比例是只有經過輕微修改的純英語單詞、名稱、或者在/usr/share字典中未能找到的名稱修改而成的。在LA項中,例如,'labtec', 'ladyboy', 'lakeside', 'lalakers', 'lalala', 'laserjet', 'lasvegas', 'lavalamp' 和 'lawman'.
地名
在之前的一篇Linux Rain article,我描述了如何建立一張37萬項澳大利亞的地名表。有了它,我現在可以回答一些類似這樣的關鍵問題「Round Hill是澳大利亞山脈中最流行的名字嗎?」和「桑迪是沙灘之最,而岩溪峽谷呢?」
在地名表中地名欄位的排名第2,所以這裡有:
哇。我當時甚至沒有關閉這個終端。(但是請注意到我是如何通過^string1^string2命令保存列印的內容。它重複著最後一個命令,但是用第2個字元串代替了第1個字元串。這是多麼有用的BASH絕招!)
另一個亟待解決的問題是有多少地名有'Mile'在其中,例如'Six Mile Creek',而他們的排名又是如何:
我在我的澳洲之旅發現有很多Dead Horse Creeks,因此有這些地名:
種類
第三個列表是探索我今年出版的1961-2010年期間澳大利亞新種類昆蟲名。從這個列表中,我去掉所有「物種的綽號」,就是種群組合的第二部分,比如像智人(你和我)和西方蜜蜂(歐洲蜜蜂)。
(科技小貼士:這個昆蟲表,可以從開發數據Zenodo庫中https://zenodo.org/record/10481取得,包括亞種。在我的『top 10』練習中,我首先分離出所有獨特的種群組合,這樣避免了重複的,例如蜜蜂iberica的亞種,以避免蜜蜂的綽號intermissa,等等。最後一個物種文件有18155個綽號。)
大多數人講科學名稱帶玩笑式地用'-us'結局,如'Biggus buggus'。那麼昆蟲學家呢?有幾個不錯的,用命令行的方式獲取字元串的最後2個字母,在這裡我都會用到這2個:
耶!昆蟲學家喜歡也『-us』結尾。接下來,我不知道有多少物種是以我的家鄉Tasmania州來命名的?(下面我想看看前100行,來確保我得到的所有'tasman'組合.)
那麼昆士蘭呢?
一般來說,昆蟲物種名單中的前10名分別是什麼呢?
嗯,除了明顯的'australis'和'australiensis',而地理方面的'occidentalis'(西部),另外昆蟲學家創建7個在10個最流行列表中的綽號已經履行了其它昆蟲學家的意願。(綽號'commoni'是給澳大利亞蝴蝶和蛾專家Ian F.B. Common[1917-2006]的榮譽。)
演變
上面的這些命令用在簡單列表上。要從簡單的列表變成文本塊,那就再次需要我們的命令行朋友了。例如,我把澳大利亞參議院於2014年7月16日的演講保存成文本文件hansard。將hansard分割成一個單詞列表:
現在看看講話中的單詞使用頻率:
即將推出...
從多列的表中做'top 10'等排名,需要更多些的命令行工具。我將會在未來的文章中證明他們的用處。
via: http://thelinuxrain.com/articles/top-10-fun-on-the-command-line
原文作者:Bob Mesibov(Bob Mesibov 是塔斯馬尼亞人,已經退休,熱衷於 Linux tinkerer)
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive