文件分割的需求
程序员文章站
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
#进行分割成为4到6个文件
#-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}_
以上脚本如有异议请指正。
上一篇: 鲍鱼干怎么做好吃?这些步骤缺一不可!
下一篇: 羊肉补肾吗?给你介绍补肾良方!