将here doc输出的内容保存到文件,当文件超过阈值,动态更新文件名

这篇博客讲述了如何在文件大小超过2M时,通过shell脚本动态更新文件名以保证数据完整性。作者最初尝试使用split命令按大小分割文件,但发现内容可能被截断,后来采用split -d -C 2M -a 4命令成功解决了问题。
摘要由CSDN通过智能技术生成

需求:

1. sqlplus查询结果保存到文件(脚本里我暂用cat代替sqlplus语句),文件名格式  <日期>_ <批号>,批号范围0000-9999;

2. 当文件大于2M自动替换文件名(批号部分加1),分割时要求保证数据完整性。

 

#!/bin/bash
#assume the threshold of the file size is 4byte
threshold=4
date=`date +%Y%m%d`
#batch num
count=0
func ()
{
    myline=$1
    file_name=${date}_$(printf "%04d" $count)
    echo $myline >> $file_name
    size=$(du -b $file_name | awk '{print $1}')
    if [ $size -ge $threshold ];then
        ((count++))
    fi
}
cat | while read line; do func $line; done <<EOF
1
2
3
4
5
6
7
8
9
0
EOF


我理解用sqlplus可以直接实现,但是我不会,只好用shell。

一开始我准备用split命令来按大小分割(split -d -b 2M -a 4)查询结果的,但是发现它分割的结果,查询结果内容可能会被截取,不符合需求。

收到chinaunix上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值