Текстовый файл, содержащий несколько столбцов с табличными разделителями между строками с примером ниже.
Code 1 (3)
5 10 7 1 1
6 10 9 1 1
7 10 10 1 1
Code 2 (2)
9 11 3 1 3
10 8 5 2 1
Code 3 (1)
12 10 2 1 1
Code 4 (2)
14 8 1 1 3
15 8 7 5 1
Я хотел бы усреднить числа в третьем столбце для каждого блока кода. Пример ниже - это то, как должен выглядеть результат.
8.67
4
2
4
Попытка 1
awk '$3~/^[[:digit:]]/ {i++; sum+=$3; print $3} $3!~/[[:digit:]]/ {print sum/i; sum=0;i=0}' in.txt
Вернул fatal: division by zero attempted
.
Попытка 2
awk -v OFS='\t' '/^Code/ { if (NR > 1) {i++; sum+=$3;} {print sum/i;}}' in.txt
Вернул еще одно деление на нулевую ошибку.
Попытка 3
awk -v OFS='\t' '/^Code/ { if (NR > 1) { print s/i; s=0; i=0; } else { s += $3; i += 1; }}' in.txt
Возвращено 1 значение: 0
.
Попытка 4
awk -v OFS='\t' '/^Code/ {
if (NR > 1)
i++
print sum += $3/i
}
END {
i++
print sum += $3/i
}'
Возвращается :
0
0
0
0.3
Я не уверен, откуда взялся этот последний номер, но пока это было наиболее близкое решение. Я получаю число для каждого блока, но не среднее.
1 ответ
Не могли бы вы попробовать следующее.
awk '
/^Code/{
if(value!=0 && value){
print sum/value
}
sum=value=""
next
}
{
sum+=$NF;
value++
}
END{
if(value!=0 && value){
print sum/value
}
}
' Input_file
Похожие вопросы
Новые вопросы
awk
AWK - это интерпретируемый язык программирования, разработанный для обработки текста и обычно используемый в качестве инструмента извлечения данных и составления отчетов. AWK используется в основном с системами Unix.