在日常工作中,尤其是在数据处理、日志分析和文本文件管理等领域,我们常常需要将多个文件的内容合并在一起。为此,我开发了一个简单而高效的 Bash 脚本工具,旨在帮助用户快速合并多个文本文件的内容,逐行输出合并结果。

工具功能

这个工具具备以下主要功能:

  1. 多文件支持:用户可以一次性传入多个文件,工具会处理所有指定的文件。

  2. 行数比较:工具会自动识别文件中行数最多的文件,并以此为基准进行合并输出。

  3. 逐行合并:工具会逐行读取每个文件的内容,并将每一行的内容合并在一起,形成一个新的输出。

  4. 错误处理:如果用户未提供足够的文件或指定的文件不存在,工具会给出相应的错误提示,确保用户能够及时发现问题。

使用场景

这个工具适用于多种场景,例如:

  • 日志分析:在处理多个日志文件时,可以将它们的内容合并,便于进行整体分析。

  • 数据整理:在数据处理过程中,可能需要将多个数据源的内容整合到一起,方便后续处理。

  • 文本比较:通过合并不同文件的内容,用户可以更容易地进行文本比较和差异分析。

如何使用

使用这个工具非常简单。用户只需将脚本保存为一个 .sh 文件,并在命令行中执行,传入需要合并的文件名。例如:

./merge_files.sh file1.txt file2.txt

工具会输出合并后的内容,逐行显示每个文件的对应行。

源码

#!/bin/bash
red() {
    text=$1
    echo -e "\033[31m${text}\033[0m"
}


# 检查是否传入参数
if [ $# -lt 2 ]; then
    red "请传入至少2个文件"
    exit 1
fi

sum=0
file=''
for arg in "$@"; do
    if [[ -f $arg ]];then
        num=`cat $arg | wc -l`
        if [[ $num -gt $sum ]];then
            sum=$num
            file=$arg
        fi      
    else
        red "文件不存在: $arg"
        exit 1
    fi
done


for (( i=0; i<$sum; i++));do
    str=''
    for arg in "$@"; do
    lineStr=$(sed -n "$((i + 1))p" "$arg")  # 使用 sed 获取第 i+1 行
        str="$str $lineStr"
    done
    echo $str
done

结论

这个 Bash 脚本工具是一个轻量级的解决方案,旨在提高用户在处理多个文本文件时的效率。无论是在开发、运维还是数据分析的工作中,它都能为用户提供便利。希望这个工具能够帮助到你,提升你的工作效率!如果你有任何建议或想法,欢迎与我分享。