一句shell命令搞定程式碼數統計

來源:互聯網
上載者:User

文法:wc [選項] 檔案…

說明:該命令統計給定檔案中的位元組數、字數、行數。如果沒有給出檔案名稱,則從標準輸入讀取。wc同時也給出所有指定檔案的總統計數。字是由空白字元區分開的最大字串。

該命令各選項含義如下:

  - c 統計位元組數。

  - l 統計行數。

  - w 統計字數。

這些選項可以組合使用。

輸出資料行的順序和數目不受選項的順序和數目的影響。

總是按下述順序顯示並且每項最多一列。

行數、字數、位元組數、檔案名稱

如果命令列中沒有檔案名稱,則輸出中不出現檔案名稱。

例如:

$ wc - lcw file1 file2
4 33 file1
7 52 file2
11 11 85 total

舉例分析:

1.統計demo目錄下,js檔案數量: find demo/ -name "*.js" |wc -l

2.統計demo目錄下所有js檔案程式碼數: find demo/ -name "*.js" |xargs cat|wc -l  或  wc -l `find ./ -name "*.js"`|tail -n1

3.統計demo目錄下所有js檔案程式碼數,過濾了空行: find /demo -name "*.js" |xargs cat|grep -v ^$|wc -l


今天面試時,突然被面試官問到怎樣用shell命令搞定某個檔案夾下java程式碼數的統計。

想了一下,基本思路就是找到這個檔案夾下面的所有java檔案,然後每個檔案統計一下代碼,外層套個for迴圈,疊加一下結果,就拿到想要的結果了。

不過顯然面試官希望我用一句shell搞定,當場暈菜了,沒搞定。回來想了一下,其實確實不是啥太難的問題。

 

最粗略版

Shell代碼   find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}'   find . -name "*.java"|xargs cat|wc -l    #Output:37634  

上面的兩句效果一樣,只不過第二種是先利用cat將多個java檔案的內容合并輸出了。然後再統計。

不過兩個都有共同的毛病——連檔案裡面的空行都給統計進去算作一行了。

去除空行版

Shell代碼   find . -name "*.java"|xargs cat|grep -v ^$|wc -l    #Output:36335   這個版本靠譜一些了,可以看到去掉空行之後的統計結果變為了:36335,比上個版本幹掉了1299行的空行。。。 

但是,java代碼還有注釋呢啊。。Fuck,還得幹掉注釋。

去除注釋版

Shell代碼   # exclude the lines begin with //   find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l    #Output:36064  

好,這個方法發現,以//開頭的注釋有36335-36064=271行。這裡需要注意的是,注釋行未必就以//作為開頭,可能N個空格之後才開始的的//,所以匹配時需要加上上面的^\s*放在開頭。

大功告成啦。扯淡。。。

java裡面注釋好幾種風格,再給你看看這個非常常見的注釋,還是會在統計結果裡面 Java代碼   /**   * @author xxx 2012-6-15 下午3:19:47   */  

咋搞。這種注釋我還真沒想好怎麼方便的除去,簡單粗暴的方法但是可以在上面grep的參數裡面再加入3個正則,分別去除以/**、*、*/開頭的行。不過我自己想著都覺得挫。不知道有沒有更好的辦法了。

原文連結:

http://www.cnblogs.com/fullhouse/archive/2011/07/17/2108786.html

http://hittyt.iteye.com/blog/1700584

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.