Я очень новичок в awk. Я пытался изменить решение с AWK, разбивая каждые N строк , но, к сожалению, мне не удается правильно добавить среднее значение как новый столбец в мой файл.
В первом столбце у меня есть метки даты / времени, затем в следующих столбцах некоторые данные. Мне нужно среднее из каждых N строк одного (позже, вероятно, больше) столбцов данных. В качестве первого решения я бы попытался записать конкретное среднее значение рядом с N-й строкой в качестве нового столбца, и просто не было записей для промежуточных строк (например, для N = 100: с 0-99 нет новых выходных данных, но в сотой строке я получаю среднее значение из последних 100 значений из выбранного столбца)
Моей конечной целью будет добавление вычисленных средних значений к каждой строке ceil (N / 2). Чтобы среднее значение для N = 100 было добавлено в 50-й строке.
Поскольку у меня ограниченные знания и ресурсы для решения этой проблемы, я мог бы просто запустить awk более одного раза и попытаться вывести свои результаты в сначала временный файл, а затем попытайтесь объединить его.
Большое спасибо!
PS: На самом деле это не должен быть только awk, я просто подумал, что это, вероятно, будет наиболее подходящим решением .
Редактировать: Мои данные выглядят так:
-9,787440e+00;1,8;29,2;0,0033;0,0405;-0,0006;0,0102
-9,787360e+00;-1,90735e-07;28,8;0,0017;0,0033;0,00012;-0,00956
-9,787280e+00;-1,90735e-07;29,4;0,0017;0,0405;0,00036;0,0102
-9,787200e+00;1,8;29;0,0033;0,0093;0,00156;-0,00764
-9,787120e+00;8;29,4;0,0093;0,0405;0,00316;0,0102
-9,787040e+00;15,6;29;0,0167;0,0129;0,00332;-0,00636
В первом столбце у меня есть отметки относительного времени, а другие значения являются измеренными значениями. Теперь скажем, для N = 3 мне нужны средние значения столбца 6 в новом столбце. Результат в идеале должен выглядеть следующим образом:
-9,787440e+00;1,8;29,2;0,0033;0,0405;-0,0006;0,0102
-9,787360e+00;-1,90735e-07;28,8;0,0017;0,0033;0,00012;-0,00956**;−0,00004**
-9,787280e+00;-1,90735e-07;29,4;0,0017;0,0405;0,00036;0,0102
-9,787200e+00;1,8;29;0,0033;0,0093;0,00156;-0,00764
-9,787120e+00;8;29,4;0,0093;0,0405;0,00316;0,0102**;0,00268**
-9,787040e+00;15,6;29;0,0167;0,0129;0,00332;-0,00636
Я пытался отметить вновь добавленные записи жирным шрифтом **. Таким образом, для N = 3 среднее значение каждых 3 строк столбца 6 следует добавлять в середине каждого окна усреднения. ceil (3/2) = 2 в данном случае в каждой второй строке после вычисления нового среднего.
Редактировать 2: мне удалось добавить вычисленное среднее значение для каждой N-й строки - теперь мне нужно сдвиньте назад N / 2 строки. Возможно ли это как-то с помощью awk или других bash инструментов? В целом это должно быть достаточно быстро - мне нужно go через 65 МБ файлов .csv. Большое спасибо!
BEGIN {
N=3
OFS=FS = ";";
}
{
sum+=$1
}
{
if (NR%N==0) {
my_add_col=sum/N
sum=0
$(NF+1)=my_add_col
}
}
{
print $0
}