如何統計代碼行數
- linux下提供了很多實用工具,甚至在安卓上,都有移植的busybox包含這些工具。
- 根據KISS理念,這些工具的功能很單一。但這些工具組合起來,就可以很方面的統計代碼量了。
統計代碼行數
- 流程爲:首先使用find命令找到所有後綴名符合規則的源代碼文件,之後使用wc命令統計行數。文件數可能過多,爲防止出錯使用xargs命令分割參數列表,最後得到的結果可以使用sort排序
- 統計所有c源代碼行數的命令:
find -name *.c | xargs wc -l |sort -r
。結果按照反序排列 find -name *.c | xargs wc -l |sort -k2
結果按照文件名排列- 如需統計c++代碼,將
*.c
更改爲*.cc
即可。如果c++使用cpp後綴名,改爲*.cpp
用到的命令詳解
find命令
- find命令遞歸搜索目錄,若任一文件使表達式爲真則放入結果
- 使用方法
find [path...] [expression]
- path指定需要尋找的目錄範圍,默認爲當前目錄
- expression通常爲測試條件,返回true或false
-name pattern
文件名符合shell正則式-path pattern
文件路徑名符合shell正則式-exec order {}
執行命令,若返回值爲0則真- 例子:
find -name *.c
搜索後綴名爲c的文件 - 例子:
find . -exec sleep {1}
每隔1s顯示一個文件
wc命令
- wc爲wordcount的縮寫,用於統計文件
- 使用方法
wc [-lwc] filename
- l、w、c分別表示統計行數、單詞數、字符數。默認爲統計全部三者
- 例子:
wc -l file1 file2
統計兩文件的行數
xargs命令
- xargs的功能是捕獲管道中前一個命令的輸出,建立分段參數表並執行另一個命令
- find命令如果產生的參數列太長,可以使用xargs命令每次只傳遞一部分參數,防止在部分系統上出現溢出錯誤
- xargs通常以空格或者換行符分割參數,
-0
選項可以保證參數列中含有空格、換行符等時分割正確 - 例子:
find /tmp -name core | xargs -0 /bin/rm -f
。把/tmp
文件夾下所有名稱爲core的文件傳遞給rm命令,強制刪除。-0
選項可以保證正確處理文件名中含有換行或空格的情況。
sort命令
- sort用於對不同的文本進行排序,以行爲單位
- 默認排序方式爲升序,
-r
選項可以修改爲降序排列 -n
選項按照字符表示的數字的值來排序,如1 2 10 20
沒有開啓此選項排序結果爲1 10 2 20
-f
忽略大小寫-t
設置列之間的分隔符,-k
指定按照第幾列排序- 例子:
sort -n -f -k 2 test.txt
。將test.txt中的各行按照第二列排序,忽略大小寫
重定向
- 行數統計結果可以存入文本文件中,命令行最後加上
> count.txt
即可 - 標準輸入、輸出、錯誤輸出分別用0,1,2表示
- 輸入重定向使用輸入重定向運算符
<
,可以把文件中的內容作爲程序的輸入。例如測試代碼時使用:./a.out < test.in
,test.in文件裏面是程序的測試輸入 - 輸出重定向可以將程序的輸出寫入到文件中,使用輸出重定向運算符
>
。- 例子:
ls 1>/dev/null 2>/dev/null
不顯示輸出和錯誤輸出。1、2與>之間不能有空格 - 例子:
ls 2> &1> t.txt
將錯誤輸出重定向到標準輸出,而此時標準輸出還未重定向,因此標準輸出內容將寫入t.txt,而錯誤輸出仍留在屏幕上 - 例子:
ls 1> t.txt 2> &1
將標準輸出和錯誤輸出都寫入t.txt
- 例子:
管道
- 管道使用
|
表示 - 功能爲前一個命令的標準輸出定向爲第二個命令的標準輸入
- 第二個命令必須能從標準輸入中讀取才行,如
ls
命令就不符合要求