博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下统计文本行数的各种方法(二)
阅读量:4452 次
发布时间:2019-06-07

本文共 2932 字,大约阅读时间需要 9 分钟。

上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以。现在试试脚本的方式,统计多个文件的行数

一、统计目录下所有文件的文件数及所有行数

脚本暂时命名为count.sh,代码如下:

#!/bin/bash# 计算当前或者指定目录的文件数目及所有文件的行数fileCount=0linesCount=0function 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        doneelse        funCount "."fiecho "filesCount = $filesCount"echo "linesCount = $linesCount"

 

1,统计当前目录的文件数及所有行数

 

2,统计指定文件目录的文件数及所有行数

 

二、统计目录下所有文件的文件数及所有行数,并指出文件路径和文件类型

脚本暂时命名为helloworldCount.sh,代码如下:

#!/bin/bashextens=(".c" ".cpp" ".h" ".class" ".hpp" ) #这个array为空其实一样filesCount=0linesCount=0function 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        doneelse        funCount "."fiecho "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

你可能感兴趣的文章
2015生命之旅---南京、南通、上海之行
查看>>
高精度练习之乘法(codevs_3117)
查看>>
小Z爱划水
查看>>
Qt Font
查看>>
2014年生日
查看>>
扫描目录下的文件并拼接在一起
查看>>
ELK 分布式日志处理 10.12
查看>>
Java虚拟机详解05----垃圾收集器及GC参数
查看>>
7. 单位,移动布局
查看>>
inux中bin与sbin目录的作用及区别介绍
查看>>
USACO 3.1 Contact
查看>>
Office之什么是高内聚低耦合
查看>>
一些奇怪的问题求回答
查看>>
这些年踩过的坑
查看>>
iOS开发拓展篇——如何把项目托管到GitHub
查看>>
性能优化之数据库优化
查看>>
类的继承、菱形继承、派生、多态
查看>>
mysql约束
查看>>
javascript鼠标及键盘事件总结及案例
查看>>
mysql表之间的关系及级联操作
查看>>