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
源码解释
- `ls $DIR_PATH`获取文件夹下所有文件;
- for语句循环遍历所有文件名;
- ${file/%DAT/CTL}使用了shell脚本的字符串替换,字符串$file的后缀匹配子串“DAT”,则将“DAT”替换成“CTL”;有关shell脚本对字符串的操作,请查看扩展字符串章节和参考博文;
- wc -l $DIR_PATH/$file | gawk '{print $1}'统计文件的行数(wc -l),使用gwak取第一个字段(行数)并赋值给变量LINES;
- echo重定向输出统计信息,形成XXX.CTL文件,内容包括XXX.DAT文件名和文件行数。
测试结果
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 shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )