当前位置:   article > 正文

linux下统计文本行数的各种方法(二)

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

转载于:https://www.cnblogs.com/mikasama/p/8032457.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/578354
推荐阅读
相关标签
  

闽ICP备14008679号