程序说明:
函数init_matrix,用于读取文件中的数据,产生一个二维数组,其中
maname[0,0]~maname[0,j]保存此数组行数
maname[i,0]保存第i行的元素数
maname[i,j]保存矩阵a_{i,j}的元素
x1,y1是开始读取的坐标,x2,y2是读取结束的坐标
函数print_matrix_e,打印矩阵,e代表仅用于END{}之中
函数sum_matrix_e(matrix,matrixA,matrixB)
矩阵matrixA+矩阵matrixB=矩阵matrix
代码: 全选
#!/usr/bin/awk -f
function init_matrix(maname,x1,y1,x2,y2,other,_ARGVEND_,i,j)
{
if( y2>=NR && NR>=y1 )
{
i=NR-y1+1
# print "NR:",NR,"Y:",y1,"i:",i
for(j=1;j<=x2-x1+1;j++)
{
# print "j:",j
maname[i,j]=$j
maname[i,0]=j #行号
maname[0,j]=i #列
maname[0,0]=i
if(other ~/show/)
printf("%d\t",maname[i,j])
}
if(other ~/show/)
printf("\n")
}
}
function print_matrix_e(print_matrix_e_matrix,_ARGVEND_,i,j)
{
for(i=1;i<=print_matrix_e_matrix[0,0];i++)
{
for(j=1;j<=print_matrix_e_matrix[i,0];j++)
{
printf("%s\t",print_matrix_e_matrix[i,j])
}
printf("\n")
}
}
function sum_matrix_e(matrix,matrixA,matrixB,other,_ARGVEND_,i,j)
{
#print matrixA[0,0],matrixB[0,0]
if(matrixA[0,0]==matrixB[0,0])
{matrix[0,0]=matrixA[0,0]
for(i=1;i<=matrixA[0,0];i++)
{
# print matrixA[i,1]
for(j=1;j<=matrixA[i,0];j++)
{
if(matrixA[i,0]==matrixB[i,0]){
matrix[i,0]=matrixA[i,0]
matrix[0,j]=matrixA[0,j]
matrix[i,j]=matrixA[i,j]+matrixB[i,j]
if(other ~/show/)print i,j,"=",matrix[i,j]
}
else{
print matrixA[i,0],matrixB[i,0]
error_no=-1
error_no[0]=i
return error_no
}
}
}
}else retuen -2
return 0
}
BEGIN{
FS=" "
}
{
init_matrix(matrix1,1,1,10,10)
init_matrix(matrix2,1,13,10,22)
}
END{
print "矩阵A======================"
print_matrix_e(matrix1)
print "矩阵B======================"
print_matrix_e(matrix2)
sum_matrix_e(mat,matrix1,matrix2)
print "矩阵A+矩阵B======================"
print_matrix_e(mat)
}
代码: 全选
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 1 59
92 99 1 8 15 67 74 51 58 0
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
79 6 13 95 97 29 31 38 45 72
代码: 全选
矩阵A======================
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 1 59
矩阵B======================
92 99 1 8 15 67 74 51 58 0
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
79 6 13 95 97 29 31 38 45 72
矩阵A+矩阵B======================
184 198 2 16 30 134 148 102 116 40
196 160 14 28 32 146 110 114 128 82
8 162 176 40 44 108 112 126 140 94
170 174 38 42 6 120 124 138 142 56
172 186 50 4 18 122 136 150 104 68
34 48 152 166 180 84 98 52 66 130
46 10 164 178 182 96 60 64 78 132
158 12 26 190 194 58 62 76 90 144
20 24 188 192 156 70 74 88 92 106
90 24 113 172 181 65 74 88 46 131