想设计一个shell,将csv格式的文件按行切割,用户输入每个切割文件的最大行数(以万为单位),比如用户输入2,那么这个文件将以2万行为单位切割,请问怎么能做到
#!/bin/bash
# 读取CSV文件的总行数
total_lines=$(wc -l < input.csv)
# 让用户输入每个切割文件的最大行数(以万为单位)
read -p "请输入每个切割文件的最大行数(以万为单位):" max_lines
# 计算每个切割文件的最大行数
max_lines=$((max_lines * 10000))
# 切割CSV文件
split -l $max_lines -d input.csv output_
# 重命名输出文件
count=1
for file in output_*; do
mv "$file" "output_$count.csv"
count=$((count + 1))
done
#!/bin/bash
# CSV文件的总行数
total_lines=$(wc -l < input.csv)
# 让用户输入每个切割文件的最大行数(以万为单位)
read -p "请输入每个切割文件的最大行数(以万为单位):" max_lines
# 用户输入校验
if [[ $max_lines =~ ^0*[1-9]+$ ]];then
# 计算每个切割文件的最大行数
max_lines=$((max_lines * 10000))
# 切割CSV文件
split -l $max_lines -d input.csv output_
# 重命名输出文件
count=1
for file in output_*; do
mv "$file" "output_$count.csv"
count=$((count + 1))
done
else
echo "Invalid Input" >&2
exit 1
fi
参考了@wangshuai6707 的回答,额外加了用户输入验证。