shell 将大文件平均分割成指定数量的小文件
1.假设有大文件hello.csv,先查看大文件行数
file_rows=wc -l hello.csv|awk '{print 1}'
选取wc命令打印结果的第一列,即行数。
2.假设要平均分割成10个小文件
file_num=10
3.生成总行数
file_num_row=$((${file_rows} + 9))
解释一下为什么要加9,因为行数可能是33333行,除以10的话每个文件就是3333行,就丢失了3行,所以加上(文件数-1)行可以保证行不会丢失,$(())是固定格式,里面可以加减乘除。
4.获取每一个文件大致多少行
every_file_row=$((${file_num_row}/${file_num}))
5.按照行数分割文件
split -d -a 4 -l ${every_file_row} hello.csv --additional-suffix=.csv hello_split_
参数解释:
-d表示添加数字后缀
-a表示后缀长度,这里为4,默认为2
-l表示按行分割,后面变量为上面求的行数
–additional-suffix=.csv表示每一个文件后面添加.csv
hello_split_表示路径和前缀,路径可以更改为其他路径,比如/home/user1/hello_split_
结果:
hello_split_0000.csv
hello_split_0001.csv
hello_split_0002.csv
hello_split_0003.csv
hello_split_0004.csv
hello_split_0005.csv
hello_split_0006.csv
hello_split_0007.csv
hello_split_0008.csv
hello_split_0009.csv
版权声明:本文为qq_43382735原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。