shell 将大文件平均分割成指定数量的小文件

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版权协议,转载请附上原文出处链接和本声明。