99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Linux數(shù)據(jù)分析必備的9個(gè)命令行工具

發(fā)布時(shí)間:2017-03-02 14:10  回復(fù):0  查看:2135   最后回復(fù):2017-03-02 14:10  
對于大多數(shù)熟悉了圖形工作環(huán)境的朋友來說,電子表格工具無疑是第一選項(xiàng)。但命令行工具同樣能夠更快更高效地解決問題—— 且只須稍微學(xué)習(xí)即可上手。
  大部分此類工具凍嚴(yán)格局限于 Linux系統(tǒng) ,而多數(shù)可同樣運(yùn)行在Unix 甚至是 Windows 環(huán)境之下。在今天的文章中,我們將嘗試幾款簡單的開源數(shù)據(jù)分析工具,并共同了解其如何運(yùn)作。
   一、headtail
  首先,讓我們先從文件處理開始。文件中有什么內(nèi)容? 其格式如何 ? 大家可以使用 cat 命令在終端中顯示文件,但其顯然不適合處理內(nèi)容較長的文件。
  輸入head tail ,二者能夠完整顯示文件中的指定行數(shù)內(nèi)容。如果大家未指定行數(shù),則默認(rèn)顯示其中 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  forJanuary,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
  在最后三行中,我能夠找到日期、作者姓名、標(biāo)題以及其它一些信息。不過由于缺少列頭,我不清楚各列的具體含義。下面查看各列的具體標(biāo)題:
  $ head -n 1 jan2017articles.csv
  Post date,Content type,Author,Title, Comment  count, Path,Tags,Word  count
  現(xiàn)在一切都非常明確,我們可以看到發(fā)布日期、內(nèi)容類型、作者、標(biāo)題、提交次數(shù)、相關(guān)URL 、各文章標(biāo)簽以及字?jǐn)?shù)。
   二、wc
  但如果需要分析數(shù)百甚至上千篇文章,又該如何處理? 這里就要使用 wc 命令了 —— 其為 字?jǐn)?shù) 一詞的縮寫。 wc 能夠?qū)ξ募淖止?jié)、字符、單詞或者行數(shù)進(jìn)行計(jì)數(shù)。在本示例中,我們希望了解文章中的行數(shù)。
  $ wc -l jan2017articles.csv 93 jan2017articles.csv
  本文件共有93 行,考慮到第一行中包含文件標(biāo)題,因此可以推測此文件是一份包含 92 篇文章的列表。
   三、grep
  下面提出新的問題:其中有多少篇文章與安全話題有關(guān)? 為了實(shí)現(xiàn)目標(biāo),我們假定需要的文章會在標(biāo)題、標(biāo)簽或者其它位置提到安全這一字眼。這時(shí), grep 工具可用于通過特定字符搜索文件或者實(shí)現(xiàn)其它搜索模式。這是一款極為強(qiáng)大的工具,因?yàn)槲覀兩踔聊軌蚶谜齽t表達(dá)式建立極為精確的匹配模式。不過這里,我們只需要尋找一條簡單的字符串。
  $ 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 標(biāo)記 ( 告知 grep 不區(qū)分大小寫 ) ,再加我們希望搜索的模式,最后是我們所搜索的目標(biāo)文件的位置。最后我們找到了 4 篇安全相關(guān)文章。如果搜索的范圍更加具體,我們可以使用 pipe—— 其能夠?qū)?/span> grep wc 命令加以結(jié)合,用以了解其中有多少行提到了安全內(nèi)容。
  $ grep -i "security" jan2017articles.csv | wc -l 4
  這樣,wc 會提取 grep 命令的輸出結(jié)果并將其作為輸入內(nèi)容。很明顯,這種結(jié)合再加上一點(diǎn) shell 腳本,終端將立即變成一款強(qiáng)大的數(shù)據(jù)分析工具。
   四、tr
  在多數(shù)分析場景下,我們都會面對CSV 文件 —— 但我們該如何將其轉(zhuǎn)換為其它格式以實(shí)現(xiàn)不同應(yīng)用方式 ? 這里我們將其轉(zhuǎn)化為 HTML 形式以通過表格進(jìn)行數(shù)據(jù)使用。 tr 命令可幫助大家實(shí)現(xiàn)這一目標(biāo),其可將一類字符轉(zhuǎn)化為另一類。同樣的,大家也可以配合 pipe 命令實(shí)現(xiàn)輸出 / 輸入對接。
  下面我們試試另一個(gè)多部分示例,即創(chuàng)建一個(gè)TSV( 即制表符分隔值 ) 文件,其中只包含發(fā)表于 1 20 日的文章。
  grep "20 Jan 2017" jan2017articles.csv |  tr ',' '\t' > jan20only.tsv
  首先,我們利用grep 進(jìn)行日期查詢。我們將此結(jié)果 pipe tr 命令,并利用后者將全部逗號替換為 tab( 表示為 ‘\t’) 。但結(jié)果去哪了 ? 這里我們使用〉字符將結(jié)果輸出為新文件而非屏幕結(jié)果。如此一來,我們可以 dqywjan20only.tsv 文件中一定包含預(yù)期的數(shù)據(jù)。
  $ 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
  如果我們先要找到包含信息最多的特定列,又該如何操作? 假設(shè)我們需要了解哪篇文章包含最長的新文章列表,那么面對之前得出的 1 20 日文章列表,我們可以使用 sort 命令對列字?jǐn)?shù)進(jìn)行排序。在這種情況下,我們并不需要使用中間文件,而可以繼續(xù)使用 pipe 。不過將長命令鏈拆分成較短的部分往往能夠簡化整個(gè)操作過程。
  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
  以上是一條長命令,我們嘗試進(jìn)行拆分。首先,我們使用sort 命令對字?jǐn)?shù)進(jìn)行排序。 -nr 選項(xiàng)告知 sort 以數(shù)字排序,并將結(jié)果進(jìn)行反向排序 ( 由大到小 ) 。此后的 -t$'\t' 則告知 sort 其中的分隔符為 tab(‘\t’) 。其中的 $ 要求此 shell 為一條需要處理的字符串,并將 \n 返回為 tab 。而 -k8 部分則告知 sort 命令使用第八列,即本示例中進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)的目標(biāo)列。
  最后,輸出結(jié)果被pipe head ,處理后在結(jié)果中顯示此文件中包含最多字?jǐn)?shù)的文章標(biāo)題。
   六、sed
  大家可能還需要在文件中選擇特定某行。這里可以使用sed 。如果希望將全部包含標(biāo)題的多個(gè)文件加以合并,并只為整體文件顯示一組標(biāo)題,即需要對清除額外內(nèi)容 或者希望只提取特定行范圍,同樣可以使用 sed 。另外, sed 還能夠很好地完成批量查找與替換任務(wù)。
  下面立足之前的文章列表創(chuàng)建一個(gè)不含標(biāo)題的新文件,用于同其它文件合并( 例如我們每月都會定期生成某個(gè)文件,現(xiàn)在需要將各個(gè)月份的內(nèi)容進(jìn)行合并 ) 。
  $ sed '1 d' jan2017articles.csv > jan17no_headers.csv
  其中的“1 d” 選項(xiàng)要求 sed 刪除第一行。
   七、cut
  了解了如何刪除行,那么我們該如何刪除列? 或者說如何只選定某一列 ? 下面我們嘗試為之前生成的列表創(chuàng)建一份新的作者清單。
  $ cut -d',' -f3 jan17no_headers.csv > authors.txt
  在這里,通過cut -d 相配合代表著我們需要第三列 (-f3) ,并將結(jié)果發(fā)送至名為 authors.txt 的新文件。
   八、uniq
  作者清單已經(jīng)完成,但我們要如何知悉其中包含多少位不同的作者? 每位作者又各自編寫了多少篇文章 ? 這里使用 uniq 。下面我們對文件進(jìn)行 sort 排序,找到惟一值,而后計(jì)算每位作者的文章數(shù)量,并用結(jié)果替換原本內(nèi)容。
  sort authors.txt | uniq -c > authors.txt
  現(xiàn)在已經(jīng)可以看到每位作者的對應(yīng)文章數(shù),下面檢查最后三行以確保結(jié)果正確。
  $ tail -n3 authors-sorted.txt 1 Tracy Miranda 1 Veer Muchandi 3 VM (Vicky) Brasseur
   九、awk
  最后讓我們了解最后一款工具,awk 。 awk 是一款出色的替換性工具,當(dāng)然其功能遠(yuǎn)不止如此。下面我們重新回歸 1 12 日文章列表 TSV 文件,利用 awk 創(chuàng)建新列表以標(biāo)明各篇文章的作者以及各作者編寫的具體字?jǐn)?shù)。
  $ 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 分隔的數(shù)據(jù)。在大括號內(nèi),我們?yōu)?/span> awk 提供執(zhí)行代碼。 $3 代表要求其將輸出第三行,而 $NF 則代表輸出最后一行 ( 字段數(shù) 的縮寫 ) ,并在兩項(xiàng)結(jié)果間添加兩個(gè)空格以進(jìn)行明確劃分。
  雖然這里列舉的例子規(guī)模較小,看似不必使用上述工具解決,但如果將范圍擴(kuò)大到包含93000 行的文件,那么其顯然很難利用電子表格程序進(jìn)行處理。
  利用這些簡單的工具與小型腳本,大家可以避免使用數(shù)據(jù)庫工具并輕松完成大量數(shù)據(jù)統(tǒng)計(jì)工作。無論您是專業(yè)人士還是業(yè)余愛好者,其作用都不容忽視。
來源:iyunv

您還未登錄,請先登錄

熱門帖子

最新帖子

?