需求背景:
- 将文件按照特定行数拆分成多个文件,文件后缀名为.csv,用于性能测试参数化文件分布式执行文件的拆分;
- 命令:sh 脚本名 拆分文件名 拆分后文件行数
脚本实现:
#!/bin/bash
if [ $# != 2 ]; then
echo "Error: sh $0 拆分文件名 拆分文件行数"
exit 1
fi
#拆分文件名
fileName=$1
echo "拆分源文件名:$1";
#拆分后每个文件行数
lineNumber=$2
echo "拆分文件行数:$2";
#拆分文件
split -d -l $lineNumber $fileName data_
# 后缀名
suffix=".csv"
# 文件名列表(假设已知的文件前缀)
files=$(ls data_*) # 根据实际情况调整文件名列表
# 为每个文件添加后缀并输出新的文件名
for file in ${files}; do
new_file=${file}${suffix} # 组合成新的文件名,包含后缀
#echo "$new_file" # 输出新文件名,确认无误后去掉echo执行重命名操作
# 重命名文件(移动原文件到新的带后缀的文件名)
mv $file $new_file # 注意:请确保没有其他同名文件存在,否则会被覆盖
done