Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用shell脚本合并两个文件_Bash_Zsh - Fatal编程技术网

Bash 使用shell脚本合并两个文件

Bash 使用shell脚本合并两个文件,bash,zsh,Bash,Zsh,我有两个文件,文件A和文件B。我想合并这两个文件,如下所示 归档 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 数据A,数据。。。数据A、数据…下的文件和变量

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

归档

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
数据A,数据。。。数据A、数据…下的文件和变量的顺序相同。。。也将按字母顺序为两个文件排序,但某个变量可能存在于一个文件中,也可能不存在


我尝试将每个块的两个文件(分隔符为----)外部连接起来,然后添加两个数字,但我想不出任何方法

可能应该用一些真正的编程语言来完成,但您要求了一个bash,所以它是这样的:

#!/bin/bash

declare -A data

read_sect_from_fd() {
    local fd=$1
    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
#/bin/bash
声明-一个数据
从_fd()中读取_sect_{
本地fd=$1
读取时-u$fd-r var val;do
[$var==----]&&break
如果[“${data[$var]}”];则
数据[$var]=$($val+${data[$var]}))
其他的
数据[$var]=$val
fi

a 135
是如何进入输出文件的?@JohnBupit我猜这是两个输入文件中
a
的总和。对
的升级投票可能应该用一些真正的编程语言来完成