shell脚本按要求拆分文件,并按照指定格式命名

写一个shell脚本,按照每200000行对一个文件进行拆分,拆分之后命名为原始文件_01.csv,原始文件_02.csv

假设原始文件名是data.txt
处理后的结果为:data_01.csv,data_02.csv…
一开始我使用的是split对文件进行拆分:

split -l 200000 data.txt -d -a 2 data_

然后再匹配出所有的结果文件,将其命名为.csv文件。

然后发现结果并不对,查阅split的用法后知道,split切分后的文件默认是从00,01,02或者0,1,2进行添加后缀的。

于是就打算自己写一个万能的模板,管他以后什么需求,都可以实现:
下面是具体的实现:

1.要求以01,02,03…添加后缀:

#查询出文件的总行数
linenums=`wc -l data.txt | awk '{print $1}'`
#行数变量
n1=1
#文件后缀名变量
name1=1
name2=0
#判断行数是否小于总行数
while [ $n1 -lt $linenums ]
do
	n2=`expr $n1 + 199999`
	#使用sed命令对文件进行拆分
	sed -n "${n1},${n2}p" data.txt > data_${name2}${name1}.csv
	n1=`expr ${n2} + 1`
	name1=`expr ${name1} + 1`
	#当文件到达09时,转换成10,也就是每当name1到达10,name2进1
	if [ ${name1} -eq 10 ];then
		name1=0
		name2=`expr ${name2} + 1`
	fi
done

2.以1,2,3为后缀

#查询出文件的总行数
linenums=`wc -l data.txt | awk '{print $1}'`
#行数变量
n1=1
#文件后缀名变量
name1=1
#判断行数是否小于总行数
while [ $n1 -lt $linenums ]
do
	n2=`expr $n1 + 199999`
	#使用sed命令对文件进行拆分
	sed -n "${n1},${n2}p" data.txt > data_${name1}.csv
	n1=`expr ${n2} + 1`
	name1=`expr ${name1} + 1`
done

你可能感兴趣的:(shell)