工具概述

这是一个灵活的文件内容行数合并工具,专门设计用于将文本文件按指定行数进行压缩和合并。对于需要处理大量文本文件、简化数据或进行日志压缩的场景,这个工具将会非常实用。

主要功能

  1. 灵活的行数合并

    • 用户可以自定义每组合并的行数

    • 支持将多行文本压缩成单行

  2. 精准的文件处理

    • 可指定源文件和目标文件

    • 提供详细的参数校验和错误提示

  3. 友好的交互体验

    • 彩色终端输出,增强可读性

    • 内置帮助文档,方便快速上手

适用场景

  • 日志文件压缩

  • 大文本文件处理

  • 数据预处理

  • 文本内容简化

使用示例

# 基本使用
bash script.sh 3 source.txt target.txt

# 查看帮助
bash script.sh -h

源码

#!/bin/bash
# 指定合并行数
num=$1

# 指定要读取的文件
file_path=$2

# 指定格式化完输入进哪个文件
file=$3

  


blue() {
    text=$1
    echo -e "\033[34m${text}\033[0m"
}  
yellow() {
    text=$1
    echo -e "\033[33m${text}\033[0m"
}
green() {
    text=$1
    echo -e "\033[32m${text}\033[0m"
}
red() {
    text=$1
    echo -e "\033[31m${text}\033[0m"
}

HELP(){
        yellow "工具使用规范: \n\tbash $0 [num] [SourceFiles] [TargetFile]\n"
  yellow "\t[num]     合并行数(Number)"
  yellow "\t[SourceFile]  操作文件(File)"
  yellow "\t[TargetFile]  结果文件(File)"
}

if [[ $1 == "-h" ]];then
  HELP
  exit 0
fi

if [[ $num =~ ^[0-9]+$ ]]; then
        echo "$file_path 按 $num 行合并文件保存至 $file"
else
  red "合并行数必须为整型数字"
        red "操作失败,请查看工具使用规范\n======================================="
        HELP
  exit 1
fi


if [[ $# -ne 3 ]];then
  red "操作失败,请查看工具使用规范\n======================================="
  HELP
  exit 1
fi

if [[ -d $file_path ]];then
        red "操作文件 $file_path 不能是一个目录" 
  red "操作失败,请查看工具使用规范\n======================================="
  HELP
        exit 1
fi
if [[ -f $file_path ]];then
        echo "操作文件 $file_path 存在, 准备操作..."
else
  echo "操作文件 $file_path 不存在, 无法操作..."
  red "操作失败,请查看工具使用规范\n======================================="
  HELP
  exit 1
fi


if [[ -d $file ]];then
  red "指定保存文件是一个目录失败" 
  exit 1
fi
if [[ -f $file ]];then
  red "文件已存在,请指定不存在的文件"
  exit 1
fi


touch "$file"

# 使用 while 循环读取文件的每一行
sum=0
str=''

while read -r line; do
    sum=$((sum + 1))
    
    # 将当前行添加到 str 中
    str="$str $line"

    # 如果达到指定的行数,则输出并重置
    if [[ $sum -eq $num ]]; then
        echo "$str" >> "$file"
        str=''
        sum=0
    fi
done < "$file_path"

# 检查是否有剩余的行需要输出
if [[ $sum -gt 0 ]]; then
    echo "$str" >> "$file"
    green "合并完成,已按 $num 行合并成一行,保存至 $file"
else
    green "合并完成,所有行已按 $num 行合并成一行,保存至 $file"
fi

使用注意事项

  • 第一个参数:合并行数(必须为正整数)

  • 第二个参数:源文件路径

  • 第三个参数:目标文件路径

工具优势

  • 简单易用

  • 高度定制

  • 错误处理完善

  • 跨平台兼容

安全性特点

  • 严格的输入参数校验

  • 防止意外覆盖文件

  • 详细的错误提示机制

结语

这个工具是一个轻量级但功能强大的文本处理脚本,能够帮助用户快速、高效地处理文本文件。无论是在日常工作还是专业开发中,它都能提供便捷的文件处理解决方案。