对两个文件中每行的每个元素求和

时间:2016-03-12 11:09:18

标签: linux shell

我想编写shell脚本,其中添加了file1和file2中每行的列元素。

file1

A 10 12 13 14
B 2 5 6 10
C 1

file2

A 11 13 11 15
B 3 1 1 1
C 2

output

A 22 25 24 29
B 5 6 7 11
C 3

我试过写这个,但看起来很混乱。 所以我想帮助它变得更好!

awk '{getline v < "file1"; split( v, a ); 
        for (i = 2; i <= NF; i++) 
            {print a[1], a[i]+ $i}
        }' file2 > temp

awk '{a[$1]=a[$1]" "$2}
    END{for(i in a)print i,a[i]
    }' temp > out

1 个答案:

答案 0 :(得分:0)

的file1

A 10 12 13 14
B 2 5 6 10
C 1

file2的

A 11 13 11 15
B 3 1 1 1
C 2

程序

cat file1 file2 | cut -d" " -f1 | sort -u | while read i
do
  line1="`grep ^$i file1 | sed -e "s/  */ /g" | cut -d" " -f2-` "
  line2="`grep ^$i file2 | sed -e "s/  */ /g" | cut -d" " -f2-` "
  (
  echo $i
  while [ "${line1}${line2}" != "" ]
  do
    v1=0`echo "$line1" | cut -d" " -f1`
    v2=0`echo "$line2" | cut -d" " -f1`
    line1="`echo "$line1" | cut -d" " -f2-`"
    line2="`echo "$line2" | cut -d" " -f2-`"
    echo `expr $v1 + $v2`
  done
  ) | xargs
done > file3

file3的

A 21 25 24 29
B 5 6 7 11
C 3

如果列数或行数不相同,则此解决方案仍然有效,缺失值被视为0

#file1
A 10 12 13 14
B 2 5 6
C 1 10
D 1 1

#file2
A 11 13 11 15
B 3 1 1 1 5
C 2
F 3 3

#file3
A 21 25 24 29
B 5 6 7 1 5
C 3 10
D 1 1
F 3 3