Linux实用脚本4:批量统计文件行数&shell 字符串操作

背景

         T24银行核心业务系统自带DFE(数据格式化引擎)可以导出相关业务数据(其以XML文件格式存储于ORACLE数据库),导出后形成类似CSV(Comma-Separated Values,逗号分割文件)文件。如今,业务要求批量统计所有导出文件的行数(记录数),因而有此博文。

源码

#!/bin/bash

DIR_PATH="/mnt/bnk/interfaces/SGBDW"
for file in ` ls $DIR_PATH`
do 
    #echo $file
    COUNT_FILE=${file/%DAT/CTL}
    #echo $COUNT_FILE
    LINES=`wc -l $DIR_PATH/$file | gawk '{print $1}'`
    if [ $LINES -gt 0 ]
    then
        echo $file $LINES > $DIR_PATH/$COUNT_FILE
    else
        #echo $file
        :
    fi
done

源码解释

  1. `ls $DIR_PATH`获取文件夹下所有文件;
  2. for语句循环遍历所有文件名;
  3. ${file/%DAT/CTL}使用了shell脚本的字符串替换,字符串$file的后缀匹配子串“DAT”,则将“DAT”替换成“CTL”;有关shell脚本对字符串的操作,请查看扩展字符串章节和参考博文;
  4. wc -l $DIR_PATH/$file | gawk '{print $1}'统计文件的行数(wc -l),使用gwak取第一个字段(行数)并赋值给变量LINES
  5. echo重定向输出统计信息,形成XXX.CTL文件,内容包括XXX.DAT文件名和文件行数。

测试结果

Linux实用脚本4:批量统计文件行数&shell 字符串操作

shell字符串操作

  • 求字符串长度
[email protected] ~ $ str="hello world"
[email protected] ~ $ echo ${#str}
11
  • 求字符串提取
[email protected] ~ $ str="hello world"
[email protected] ~ $ echo ${str:6}
world

说明:从位置6提取子串

  • 求字符串替换

${string/substring/replacement}

使用$replacement, 来代替第一个匹配的$substring

${string//substring/replacement}

使用$replacement, 代替所有匹配的$substring

${string/#substring/replacement}

如果$string前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

${string/%substring/replacement}

如果$string后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

Linux实用脚本4:批量统计文件行数&shell 字符串操作

参考

         linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )