2016-04-10 6 views
2

ファイルAとファイルBの2つのファイルがあります。以下のように2つのファイルをマージします。シェルスクリプトを使用して2つのファイルをマージする

ファイル

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、データ...の下の変数も、両方のファイルに対してアルファベット順にソートされますが、一部の変数は1つのファイルに存在する場合もあれば、ない。

すべてのブロック(区切り記号----)の2つのファイルを外側に結合してから2つの数字を追加しようとしましたが、それを行う方法は考えられませんでした。

+0

はどのように '135'は、出力ファイルに来るのでしょうか? –

+2

@JohnBupit私はそれが両方の入力ファイルの 'a'の合計であると思います。 –

答えて

0

は、おそらくいくつかの実際のプログラミング言語で行う必要がありますが、あなたはそれが行くので、ここでは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 
+0

Upvoteは 'おそらく実際のプログラミング言語で行うべきだろうか' – boardrider

関連する問題