使用 shell 脚本合并两个文件

Merge two files using shell scripting

我有两个文件,文件 A 和文件 B。我想合并这两个文件,如下所示。

文件A

Data A
a 123
b 35
-------
Data B
-------
Data C
a 234
d 23

文件 B

Data A
a 12
c 1
-------
Data B
-------
Data C    
d 24

输出应该是

Data A
a 135
b 35
c 1
-------
Data B
-------
Data C
a 234    
d 47

Data A,Data ... 对于文件和 Data A 下的变量的顺序相同,Data ... 也将按字母顺序对两个文件进行排序,但某些变量可能在一个文件中文件或可能不会。

我尝试将每个块的两个文件外连接(分隔符为 ----),然后将这两个数字相加,但我想不出任何方法来做到这一点。

可能应该用某种真正的编程语言完成,但您要求 bash 所以这里是:

#!/bin/bash

declare -A data

read_sect_from_fd() {
    local fd=
    while read -u $fd -r var val; do
        [[ $var == ------- ]] && break
        if [ "${data[$var]}" ]; then
            data[$var]=$(( $val + ${data[$var]} ))
        else
            data[$var]=$val
        fi
    done <&3
}

print_sect() {
    for i in "${!data[@]}"; do
        echo "$i ${data[$i]}"
    done
}

exec 3<"File A"
exec 4<"File B"

while IFS= read -u 3 -r heading ; do
    read_sect_from_fd 3
    IFS= read -u 4 -r heading
    read_sect_from_fd 4
    [ "$not_first" ] && echo "-------"
    not_first=1
    echo "$heading"
    print_sect
    data=()
done