1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
BEGIN {
number_of_lines = 0;
number_of_header = 0;
T_number_of_lines = 0;
T_number_of_header = 0;
input_file = in_file;
output_file = out_file;
#
# get the first line, if any.
getline aaa <input_file;
if (ERRNO != "") {
#printf("ERRNO is %s\n", ERRNO);
#printf("a new file will be created at %s\n", output_file);
# totals-file not found, this is the first run.
first_run = "yes";
} else {
# totals-file is found. Read it into the arrays
first_run = "no";
for ( i = 1; i < 20000; i++) {
theLine = aaa;
where_is_colon_1 = index(theLine, ":");
part_1 = substr(theLine, 1, where_is_colon_1 - 1);
rest_1 = substr(theLine, where_is_colon_1 + 1);
where_is_colon_2 = index(rest_1, ":");
part_2 = substr(rest_1, 1, where_is_colon_2 - 1) + 0;
rest_2 = substr(rest_1, where_is_colon_2 + 1);
if (part_2 == 0) {
# header part
T_number_of_header = T_number_of_header + 1;
T_header_part1[T_number_of_header] = part_1;
T_header_part2[T_number_of_header] = part_2;
T_header_part3[T_number_of_header] = rest_2;
} else {
# source lines
# a new line
T_number_of_lines = part_2;
T_source_part1[T_number_of_lines] = part_1;
T_source_part2[T_number_of_lines] = part_2;
T_source_part3[T_number_of_lines] = rest_2;
}
aaa = "";
# get the next line
getline aaa <input_file;
if (aaa == "") {
# EOF
break;
}
}
close(input_file);
# Test it
#printf("Test it\n");
#for (i = 1; i <= T_number_of_header; i++) {
# printf("%8s:%5d:%s\n", T_header_part1[i], T_header_part2[i], T_header_part3[i]);
#}
#for (i = 1; i <= T_number_of_lines; i++) {
# printf("%8s:%5d:%s\n", T_source_part1[i], T_source_part2[i], T_source_part3[i]);
#}
}
}
{
theLine = $0;
where_is_colon_1 = index(theLine, ":");
part_1 = substr(theLine, 1, where_is_colon_1 - 1);
rest_1 = substr(theLine, where_is_colon_1 + 1);
where_is_colon_2 = index(rest_1, ":");
part_2 = substr(rest_1, 1, where_is_colon_2 - 1) + 0;
rest_2 = substr(rest_1, where_is_colon_2 + 1);
if (part_2 == 0) {
# header part
number_of_header = number_of_header + 1;
header_part1[number_of_header] = part_1;
header_part2[number_of_header] = part_2;
header_part3[number_of_header] = rest_2;
} else {
# source lines
# a new line
number_of_lines = part_2;
source_part1[number_of_lines] = part_1;
source_part2[number_of_lines] = part_2;
source_part3[number_of_lines] = rest_2;
where_ = index(part_1, "-");
if (where_ > 0) {
# don't take care
} else {
where_2 = index(part_1, "#####");
if (where_2 > 0) {
# don't take care
} else {
d_part_1 = part_1 + 0;
# look at T_source_part1[part_2]
where_3 = index(T_source_part1[part_2], "#####");
if (where_3 > 0) {
sum = d_part_1;
# write the sum to T_source_part1
T_source_part1[part_2] = d_part_1;
} else {
d_T = T_source_part1[part_2] + 0;
sum = d_part_1 + d_T;
# write the sum back to T_source_part1
T_source_part1[part_2] = sum;
}
}
}
}
}
END {
if (first_run == "yes") {
# copy to T_
T_number_of_header = number_of_header;
T_number_of_lines = number_of_lines;
for(i = 1; i <= T_number_of_header; i++) {
T_header_part1[i] = header_part1[i];
T_header_part2[i] = header_part2[i];
T_header_part3[i] = header_part3[i];
}
for (i = 1; i <= T_number_of_lines; i++) {
T_source_part1[i] = source_part1[i];
T_source_part2[i] = source_part2[i];
T_source_part3[i] = source_part3[i];
}
}
#printf("T_number_of_header is %d\n", T_number_of_header);
#printf("T_number_of_lines is %d\n", T_number_of_lines);
# delete the previous version
printf("") > output_file;
for(i = 1; i <= T_number_of_header; i++) {
printf("%9s:%5d:%s\n", T_header_part1[i], T_header_part2[i], T_header_part3[i]) >> output_file;
}
for (i = 1; i <= T_number_of_lines; i++) {
printf("%9s:%5d:%s\n", T_source_part1[i], T_source_part2[i], T_source_part3[i]) >> output_file;
}
close(output_file);
}
|