我想编写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
答案 0 :(得分:0)
A 10 12 13 14
B 2 5 6 10
C 1
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
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