linux下統計文字行數的各種方法之使用shell指令碼統計
阿新 • • 發佈:2019-01-07
上一篇講的都是統計單個檔案的方法,直接在命令列執行就可以。現在試試指令碼的方式,統計多個檔案的行數
一、統計目錄下所有檔案的檔案數及所有行數
指令碼暫時命名為count.sh,程式碼如下:
#!/bin/bash
# 計算當前或者指定目錄的檔案數目及所有檔案的行數
fileCount=0
linesCount=0
function funCount(){
for file in `ls $1`
do
if [ -d $1"/"$file ];then
funCount $1"/"$file
else
#declare -i 定義整型變數fileLines
declare -i fileLines
#使用的是上一篇中的一種方法,可以靈活使用其他任何一種(grep awk wc -l等)
fileLines=`sed -n "$=" $1"/"$file`
#let是整數運算,linux中整數運算一般通過 let 和 expr 這兩個指令來實現
#如對變數 x 加 1 可以寫作:let "x = $x + 1" 或者 x=`expr $x + 1`
#個人感覺,二者差不多,前者表達比較簡單,擇優用之,具體可以在看專門的對比帖子
let linesCount=$linesCount+$fileLines
let filesCount=$filesCount+1
fi
done
}
if [ $# -gt 0 ];then
for m_dir in [email protected]
do
funCount $m_dir
done
else
funCount "."
fi
echo "filesCount = $filesCount"
echo "linesCount = $linesCount"
1,統計當前目錄的檔案數及所有行數
2,統計指定檔案目錄的檔案數及所有行數
二、統計目錄下所有檔案的檔案數及所有行數,並指出檔案路徑和檔案型別
指令碼暫時命名為helloworldCount.sh,程式碼如下:
#!/bin/bash
extens=(".c" ".cpp" ".h" ".class" ".hpp" ) #這個array為空其實一樣
filesCount=0
linesCount=0
function funCount(){
for file in `ls $1`
do
if [ -d $1"/"$file ];then
funCount $1"/"$file
else
fileName=$1"/"$file
EXTENSION="."${fileName##*.}
#echo "------"$EXTENSION
# ${fileName##*.} 擷取.之後的部分
echo "fileName = $fileName Extension = $EXTENSION"
#if [[ "${extens[@]}/$EXTENSION/}" != "${extens[@]}" ]];then
#echo "--------"${extens[@]}/$EXTENSION/
#echo "--------"${extens[@]}
#/ 用來拼接多個變數並組成一個array
if [[ "${extens[@]}/$EXTENSION/}" != "${extens[@]}" ]];then
declare -i fileLines
fileLines=`sed -n "$=" $fileName`
echo $fileName":"$fileLines
let linesCount=$linesCount+$fileLines
let filesCount=$filesCount+1
fi
fi
done
}
if [ $# -gt 0 ];then
for m_dir in [email protected]
do
funCount $m_dir
done
else
funCount "."
fi
echo "filesCount = $filesCount"
echo "linesCount = $linesCount"
1,統計當前目錄的檔案數及所有行數
2,統計指定檔案目錄的檔案數及所有行數
指令碼中涉及到的知識點羅列如下:
1,declare -i 定義整型變數fileLines
2,let是整數運算,linux中整數運算一般通過 let 和 expr 這兩個指令來實現,如對變數 x 加 1 可以寫作:let “x = $x + 1” 或者 x=expr $x + 1
3,${fileName##*.} 擷取.之後的部分
4,/ 用來拼接多個變數並組成一個array