欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件分割的需求

程序员文章站 2022-06-03 18:17:33
...

需求:由于某一文件一次性生成的文件太大,需分解成多个小文件进行入数据库操作,同时每个小文件.txt跟一个.new的空文件,分割后的文件格式如下:
文件分割的需求
这个是比较简单的分割脚本,将生成文件的批次00/01/02放在了文件尾
另一种是将分割批次放在中间(即现在00的位置),分割后的文件如下:
文件分割的需求
以下是分割shell脚本:

#!/bin/bash
#sh脚本开发
#Program:
#   http://man.linuxde.net/ 指令网址

#获取年月日
ls_date=`date +%Y%m%d`
#获取小时
ls_hour=`date +%H`
#txt大文件路径
file="/u01/dataUpload/kettle_file/XF_VIE_DHXX/ftpPut/DHXX_vie_0_${ls_hour}_${ls_date}.txt"
#.new文件路径
filenew="/u01/dataUpload/kettle_file/XF_VIE_DHXX/ftpPut/DHXX_vie_0_${ls_hour}_${ls_date}.new"
#打印文件名
echo $file

#获取文件行数
fileLine=`wc -l < $file`
#打印文件行数
echo 'fileLine='$fileLine
#求余数,这里的3代表要将文件分割成3个小文件,具体看需求
ys=$(($fileLine%3))
#打印余数
echo 'ys='$ys
#余数大于0
if [ $ys > 0 ] ; then
#3代表分割成3个文件
#ss代表行数
ss=$(($fileLine/3))
ss=$((ss+1))
echo 'ss='$ss
else
ss =$(($fileLine/3))
fi
# -d 标识数字结尾  -a 2 代表显示两位 -l $ss 每个文件显示的行数
# split -a 2 -d  -l $ss  test1.txt  DHXX_vie_`date +%H`_将test1.txt分割为3个文件,每个文件ss行,后缀命名以数字结尾且是两位如01/02/03
# ls|grep DHXX_vie_| 查找DHXX_vie_命名的文件
# -n 选项 该选项表示将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行  1  表示1个参数
# -i或是-I:linux支持类型不同,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。选项告诉 xargs 可以使用{}代替传递过来的参数。
# ls|grep DHXX_vie_|xargs -n1 -i{} 将DHXX_vie_的文件每次传一个赋值给{},(DHXX_vie_12_01,DHXX_vie_12_02,DHXX_vie_12_03)
# mv {} {}_`date +%Y%m%d`.txt 将DHXX_vie_12_01更名为DHXX_vie_12_01_`date +%Y%m%d`.txt
#split -a 2 -d  -l $ss "$file" DHXX_vie_0_&&ls|grep DHXX_vie_0|xargs -n1 -i{} mv {} {}_`date +%Y%m%d`.txt


#mv  DHXX_vie_0* ./ftpPut/
#echo $file
#进行分割成为46个文件
#-b 文件大小
#-a 指定后缀的长度
#-d 使用数字后最而不是字母
#-l 指定每个文件的行数
#--verbose 显示生成的信息
#.txt前缀
split --verbose -l $ss "$file" -d -a 2 --additional-suffix=.txt DHXX_vie_0_00_${ls_date}_

mv  DHXX_vie_0* ./ftpPut/

rm ./0

#rm "$file"


for a in {0..2}
do
echo ${a}
cp $filenew /u01/dataUpload/kettle_file/XF_VIE_DHXX/ftpPut/DHXX_vie_0_00_${ls_date}_0${a}.new

done

#echo DHXX_vie_0_00_${ls_date}_

以上脚本如有异议请指正。

相关标签: 运维