Этот скрипт awk
должен дать вам все необходимые навыки, чтобы получить то, что вы хотите.
Он в основном проходит по всем строкам во входном файле, игнорируя те, где второе поле - minAccessTime
(Заголовок CSV).
Во всех других записях обновляется количество минимумов, максимумов минимумов, минимумов максимумов, максимумов максимумов, суммы минимумови сумма максимумов как для общих данных, так и для каждого отдельного имени функции.
Первый хранится в count
, min_min
, max_min
, min_max
, max_max
, sum_min
и sum_max
.Последние хранятся в ассоциативных массивах с похожими именами (с добавлением _arr
).
Затем, как только все записи прочитаны, секция END
выводит информацию.
NR > 1 {
count++;
sum_min += $2;
sum_max += $3;
if (count == 1) {
min_min = $2;
max_min = $2;
min_max = $3;
max_max = $3;
} else {
if ($2 < min_min) { min_min = $2; }
if ($2 > max_min) { max_min = $2; }
if ($3 < min_max) { min_max = $3; }
if ($3 > max_max) { max_max = $3; }
}
count_arr[$1]++;
sum_min_arr[$1] += $2;
sum_max_arr[$1] += $3;
if (count_arr[$1] == 1) {
min_min_arr[$1] = $2;
max_min_arr[$1] = $2;
min_max_arr[$1] = $3;
max_max_arr[$1] = $3;
} else {
if ($2 < min_min_arr[$1]) { min_min_arr[$1] = $2; }
if ($2 > max_min_arr[$1]) { max_min_arr[$1] = $2; }
if ($3 < min_max_arr[$1]) { min_max_arr[$1] = $3; }
if ($3 > max_max_arr[$1]) { max_max_arr[$1] = $3; }
}
}
END {
print "Overall:"
print " Total records = " count
print " Sum of minima = " sum_min
print " Sum of maxima = " sum_max
if (count > 0) {
print " Min of minima = " min_min
print " Max of minima = " max_min
print " Min of maxima = " min_max
print " Max of maxima = " max_max
print " Avg of minima = " sum_min / count
print " Avg of maxima = " sum_max / count
}
for (task in count_arr) {
print "Function " task ":"
print " Total records = " count_arr[task]
print " Sum of minima = " sum_min_arr[task]
print " Sum of maxima = " sum_max_arr[task]
print " Min of minima = " min_min_arr[task]
print " Max of minima = " max_min_arr[task]
print " Min of maxima = " min_max_arr[task]
print " Max of maxima = " max_max_arr[task]
print " Avg of minima = " sum_min_arr[task] / count_arr[task]
print " Avg of maxima = " sum_max_arr[task] / count_arr[task]
}
}
Сохранение этого скрипта в qq.awk
и помещение ваших примеров данных в qq.in
с последующим запуском:
awk -F, -f qq.awk qq.in
генерирует следующий вывод, который, я уверен, даст вам все возможные фрагменты информации, которые вам нужны:
Overall:
Total records = 7
Sum of minima = 2930
Sum of maxima = 5120
Min of minima = 200
Max of minima = 700
Min of maxima = 600
Max of maxima = 1000
Avg of minima = 418.571
Avg of maxima = 731.429
Function getStage:
Total records = 3
Sum of minima = 1900
Sum of maxima = 2600
Min of minima = 600
Max of minima = 700
Min of maxima = 800
Max of maxima = 1000
Avg of minima = 633.333
Avg of maxima = 866.667
Function getInfo:
Total records = 4
Sum of minima = 1030
Sum of maxima = 2520
Min of minima = 200
Max of minima = 300
Min of maxima = 600
Max of maxima = 700
Avg of minima = 257.5
Avg of maxima = 630