<em id="pn7p8"><acronym id="pn7p8"><u id="pn7p8"></u></acronym></em>

    <th id="pn7p8"></th>

    <button id="pn7p8"></button>

      <dd id="pn7p8"></dd>
      <progress id="pn7p8"><track id="pn7p8"></track></progress>

      Linux培訓
      達內IT學院

      400-111-8989

      九款命令行工具助力Linux環境下的數據分析

      • 發布:Linux培訓
      • 來源:網絡
      • 時間:2017-03-17 11:39

      要對數據進行分析,大家會從哪里入手?對于大多數熟悉了圖形工作環境的朋友來說,電子表格工具無疑是第一選項。但命令行工具同樣能夠更快更高效地解決問題——且只須稍微學習即可上手。

      大部分此類工具凍嚴格局限于Linux,而多數可同樣運行在Unix甚至是Windows環境之下。在今天的文章中,我們將嘗試幾款簡單的開源數據分析工具,并共同了解其如何運作。

      一、head與tail

      首先,讓我們先從文件處理開始。文件中有什么內容?其格式如何?大家可以使用cat命令在終端中顯示文件,但其顯然不適合處理內容較長的文件。

      輸入head與tail,二者能夠完整顯示文件中的指定行數內容。如果大家未指定行數,則默認顯示其中10行。

      $ tail -n 3 jan2017articles.csv

      02 Jan 2017,Article,Scott Nesbitt,3 tips for effectively using wikis for documentation,1,/article/17/1/tips-using-wiki-documentation,"Documentation, Wiki",710

      02 Jan 2017,Article,Jen Wike Huger,The Opensource.com preview for January,0,/article/17/1/editorial-preview-january,,358

      02 Jan 2017,Poll,Jason Baker,What is your open source New Year's resolution?,1,/poll/17/1/what-your-open-source-new-years-resolution,,186

      在最后三行中,我能夠找到日期、作者姓名、標題以及其他一些信息。不過由于缺少列頭,我不清楚各列的具體含義。下面查看各列的具體標題:

      $ head -n 1 jan2017articles.csv

      Post date,Content type,Author,Title,Comment count,Path,Tags,Word count

      現在一切都非常明確,我們可以看到發布日期、內容類型、作者、標題、提交次數、相關URL、各文章標簽以及字數。

      二、wc

      但如果需要分析數百甚至上千篇文章,又該如何處理?這里就要使用wc命令了——其為“字數”一詞的縮寫。wc能夠對文件的字節、字符、單詞或者行數進行計數。在本示例中,我們希望了解文章中的行數。

      $ wc -l jan2017articles.csv 93 jan2017articles.csv

      本文件共有93行,考慮到第一行中包含文件標題,因此可以推測此文件是一份包含92篇文章的列表。

      三、grep

      下面提出新的問題:其中有多少篇文章與安全話題有關?為了實現目標,我們假定需要的文章會在標題、標簽或者其他位置提到安全這一字眼。這時,grep工具可用于通過特定字符搜索文件或者實現其他搜索模式。這是一款極為強大的工具,因為我們甚至能夠利用正則表達式建立極為精確的匹配模式。不過這里,我們只需要尋找一條簡單的字符串。

      $ grep -i "security" jan2017articles.csv

      30 Jan 2017,Article,Tiberius Hefflin,4 ways to improve your security online right now,3,/article/17/1/4-ways-improve-your-online-security,Security and encryption,1242

      28 Jan 2017,Article,Subhashish Panigrahi,How communities in India support privacy and software freedom,0,/article/17/1/how-communities-india-support-privacy-software-freedom,Security and encryption,453

      27 Jan 2017,Article,Alan Smithee,Data Privacy Day 2017: Solutions for everyday privacy,5,/article/17/1/every-day-privacy,"Big data, Security and encryption",1424

      04 Jan 2017,Article,Daniel J Walsh,50 ways to avoid getting hacked in 2017,14,/article/17/1/yearbook-50-ways-avoid-getting-hacked,"Yearbook, 2016 Open Source Yearbook, Security and encryption, Containers, Docker, Linux",2143

      我們使用的格式為grep加-i標記(告知grep不區分大小寫),再加我們希望搜索的模式,最后是我們所搜索的目標文件的位置。最后我們找到了4篇安全相關文章。如果搜索的范圍更加具體,我們可以使用pipe——它能夠將grep同wc命令加以結合,用以了解其中有多少行提到了安全內容。

      $ grep -i "security" jan2017articles.csv | wc -l 4

      這樣,wc會提取grep命令的輸出結果并將其作為輸入內容。很明顯,這種結合再加上一點shell腳本,終端將立即變成一款強大的數據分析工具。

      四、tr

      在多數分析場景下,我們都會面對CSV文件——但我們該如何將其轉換為其他格式以實現不同應用方式?這里,我們將其轉化為HTML形式以通過表格進行數據使用。tr命令可幫助大家實現這一目標,它可將一類字符轉化為另一類。同樣的,大家也可以配合pipe命令實現輸出/輸入對接。

      下面,我們試試另一個多部分示例,即創建一個TSV(即制表符分隔值)文件,其中只包含發表于1月20日的文章。

      $ grep "20 Jan 2017" jan2017articles.csv | tr ',' '\t' > jan20only.tsv

      首先,我們利用grep進行日期查詢。我們將此結果pipe至tr命令,并利用后者將全部逗號替換為tab(表示為‘\t’)。但結果去哪了?這里我們使用〉字符將結果輸出為新文件而非屏幕結果。如此一來,我們可以dqywjan20only.tsv文件中一定包含預期的數據。

      $ cat jan20only.tsv 20 Jan 2017 Article Kushal Das 5 ways to expand your project's contributor base 2 /article/17/1/expand-project-contributor-base Getting started 690 20 Jan 2017 Article D Ruth Bavousett How to write web apps in R with Shiny 2 /article/17/1/writing-new-web-apps-shiny Web development 218 20 Jan 2017 Article Jason Baker "Top 5: Shell scripting the Cinnamon Linux desktop environment and more" 0 /article/17/1/top-5-january-20 Top 5 214 20 Jan 2017 Article Tracy Miranda How is your community promoting diversity? 1 /article/17/1/take-action-diversity-tech Diversity and inclusion 1007

      五、sort

      如果我們先要找到包含信息最多的特定列,又該如何操作?假設我們需要了解哪篇文章包含最長的新文章列表,那么面對之前得出的1月20日文章列表,我們可以使用sort命令對列字數進行排序。在這種情況下,我們并不需要使用中間文件,而可以繼續使用pipe。不過將長命令鏈拆分成較短的部分往往能夠簡化整個操作過程。

      $ sort -nr -t$'\t' -k8 jan20only.tsv | head -n 1

      20 Jan 2017 Article Tracy Miranda How is your community promoting diversity? 1 /article/17/1/take-action-diversity-tech Diversity and inclusion 1007

      以上是一條長命令,我們嘗試進行拆分。首先,我們使用sort命令對字數進行排序。-nr選項告知sort以數字排序,并將結果進行反向排序(由大到小)。此后的-t$'\t'則告知sort其中的分隔符為tab(‘\t’)。其中的$要求此shell為一條需要處理的字符串,并將\n返回為tab。而-k8部分則告知sort命令使用第八列,即本示例中進行字數統計的目標列。

      最后,輸出結果被pipe至head,處理后在結果中顯示此文件中包含最多字數的文章標題。

      六、sed

      大家可能還需要在文件中選擇特定某行。這里可以使用sed。如果希望將全部包含標題的多個文件加以合并,并只為整體文件顯示一組標題,即需要清除額外內容; 或者希望只提取特定行范圍,同樣可以使用sed。另外,sed還能夠??好地完成批量查找與替換任務。

      下面立足之前的文章列表創建一個不含標題的新文件,用于同其他文件合并(例如我們每月都會定期生成某個文件,現在需要將各個月份的內容進行合并)。

      $ sed '1 d' jan2017articles.csv > jan17no_headers.csv

      其中的“1 d”選項要求sed刪除第一行。

      七、cut

      了解了如何刪除行,那么我們該如何刪除列?或者說如何只選定某一列?下面我們嘗試為之前生成的列表創建一份新的作者清單。

      $ cut -d',' -f3 jan17no_headers.csv > authors.txt

      在這里,通過cut與-d相配合代表著我們需要第三列(-f3),并將結果發送至名為authors.txt的新文件。

      八、uniq

      作者清單已經完成,但我們要如何知悉其中包含多少位不同的作者?每位作者又各自編寫了多少篇文章?這里使用uniq。下面我們對文件進行sort排序,找到唯一值,而后計算每位作者的文章數量,并用結果替換原本內容。

      sort authors.txt | uniq -c > authors.txt

      現在已經可以看到每位作者的對應文章數,下面檢查最后三行以確保結果正確。

      $ tail -n3 authors-sorted.txt

      1 Tracy Miranda

      1 Veer Muchandi

      3 VM (Vicky) Brasseur

      九、awk

      最后讓我們了解最后一款工具,awk。awk是一款出色的替換性工具,當然其功能遠不止如此。下面我們重新回歸1月12日文章列表TSV文件,利用awk創建新列表以標明各篇文章的作者以及各作者編寫的具體字數。

      $ awk -F "\t" '{print $3 " " $NF}' jan20only.tsv

      Kushal Das 690

      D Ruth Bavousett 218

      Jason Baker 214

      Tracy Miranda 1007

      其中的-F "\t"用于告知awk目前處理的是由tab分隔的數據。在大括號內,我們為awk提供執行代碼。$3代表要求其將輸出第三行,而$NF則代表輸出最后一行(即‘字段數’的縮寫),并在兩項結果間添加兩個空格以進行明確劃分。

      雖然這里列舉的例子規模較小,看似不必使用上述工具解決,但如果將范圍擴大到包含93000行的文件,那么它顯然很難利用電子表格程序進行處理。

      利用這些簡單的工具與小型腳本,大家可以避免使用數據庫工具并輕松完成大量數據統計工作。無論您是專業人士還是業余愛好者,它的作用都不容忽視。

      預約申請免費試聽課

      填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

      上一篇:Linux下六個有關file的實例整理
      下一篇:7個Linux中判斷文件系統類型的方法

      拯救者Linux:我是如何給我的團隊引入Linux的

      Linux只有十三個字符的經典Fork炸彈

      騰訊十年運維老兵:運維團隊的五個“殺手锏”

      為您的Linux應用開發加油提速(二)

      • 掃碼領取資料

        回復關鍵字:視頻資料

        免費領取 達內課程視頻學習資料

      • 視頻學習QQ群

        添加QQ群:1143617948

        免費領取達內課程視頻學習資料

      Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

      選擇城市和中心
      黑龍江省

      吉林省

      河北省

      湖南省

      貴州省

      云南省

      廣西省

      海南省

      高清特黄a大片,日本真人真做爰,特级做人爱C级,免费a级毛片 百度 好搜 搜狗
      <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>