文章目录
- 一、原始代码
- 二、增加可执行权限
- 三、调用方式
一、原始代码
split_with_header.sh如下
#!/bin/bash
set -x# 确保脚本接收了正确数量的参数
if [ "$#" -lt 2 ]; thenecho "Usage: $0 <file> <lines_per_file> [output_prefix]"exit 1
fi# 读取命令行参数
FILE=$1
LINES_PER_FILE=$2
OUTPUT_PREFIX=${3:-x} # 如果没有提供第三个参数,则默认前缀为'x'# 提取文件的第一行
HEADER=$(head -n 1 "$FILE")# 生成当前目录下的临时文件名,避免和现有文件冲突
TMP_FILE=$(mktemp ./tmp.XXXXXX)# 从原始文件中移除第一行
tail -n +2 "$FILE" > "$TMP_FILE"# 分割文件,注意split命令中的输出前缀逻辑
if [ -z "$3" ]; then# 如果没有提供输出前缀,按split默认行为,此时TMP_FILE路径用于前缀split -l "$LINES_PER_FILE" "$TMP_FILE" "$OUTPUT_PREFIX"
else# 如果提供了输出前缀,使用该前缀split -l "$LINES_PER_FILE" "$TMP_FILE" "${OUTPUT_PREFIX}"
fi# 将第一行添加到每个分割后的文件
for file in ${OUTPUT_PREFIX}*; do# 使用中间临时文件来避免直接修改循环中的文件{ echo "$HEADER"; cat "$file"; } > "${file}.tmp" && mv "${file}.tmp" "$file"
done# 清理临时文件
rm "$TMP_FILE"echo "分割完成。"
二、增加可执行权限
chmod +x split_with_header.sh
三、调用方式
./split_with_header.sh 原始文件名 每个文件的行数