linux下統計文本行數的各種方法(二)


上一篇講的都是統計單個文件的方法,直接在命令行執行就可以。現在試試腳本的方式,統計多個文件的行數

一、統計目錄下所有文件的文件數及所有行數

腳本暫時命名為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 $@
        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 $@
        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

 

參考來源:http://www.jb51.net/article/61943.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM