Использование AWK для вычисления среднего значения и дисперсии столбцов

Попробуйте это,

sed -i 's/#\(.*\)7086/\18088/g' file_content

Здесь каждая вещь после #и до 7086 группируется, а затем вся строка будет заменена на \1 (группа 1 или, скажем, регион 1 ) и требуемый порт 8088

1
02.09.2016, 01:12
3 ответа

вам понадобится цикл, который переходит ко всем столбцам

{ for(i=1;i<=NF;i++) ...

и массивам

... total[i]+=$i ; sq[i]+=$i*$i ; }

. Это результат в командной строке, например (для среднего)

awk '{ for(i=1;i<=NF;i++) total[i]+=$i ; } 
    END { for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;}' 

полная программа

. Я использую этот awk для вычисления среднего и дисперсии, однако результата у меня нет.

 { for(i=1;i<=NF;i++) {total[i]+=$i ; sq[i]+=$i*$i ; } }
END {

   for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;
   printf "\n" ;
   for(i=1;i<=NF;i++) printf "%f ",sq[i]/NR-(total[i]/NR)**2 ;
   printf "\n" ;
}
1
28.01.2020, 01:11
awk -F ',' '{print;x+=$2}END{print "MEAN" x/NR}' filename.csv

где $2— второй столбец, а NR— количество записей мы можем сохранить значения $2в переменной x

-1
28.01.2020, 01:11

Подход "C", основанный на документации . Вероятно, не так эффективно или чисто, как могло бы быть, но, возможно, легче читать. Вычисляет среднее значение и дисперсию для каждого столбца файлов данных, содержащих NxM элементов, разделенных пробелами.

#!/bin/awk -f

BEGIN { } {
    if (max_nf < NF)
        max_nf = NF
    max_nr = NR
    for (x = 1; x <= NF; x++)
        mat[x, NR] = $x
} END {
    for (x = 1; x <= max_nf; x++) {
        mean = 0.0
        var = 0.0
        for (y = 1; y <= max_nr; y++) {
            var += (y - 1) * (mat[x, y] - mean) * (mat[x, y] - mean) / y
            mean += (mat[x, y] - mean) / y
        }
        printf("%f %f\n", mean, var / (max_nr - 1))
    } 
}

Пример запуска:

./ColVarAndMean.awk dataset.csv > output.dat && cat output.dat 
1.625000 0.839286 
1.625000 1.410714 
12.000000 0.285714 
4.500000 6.000000 
0.250000 0.214286 
0.375000 0.553571 
478791.500000 174812449479.714294 
0
29.04.2020, 01:58

Теги

Похожие вопросы