calculando média e SD de uma coluna

0

Eu tenho as seguintes linhas no meu arquivo,

echo "Start 2A25.20080401.59125.7.HDF 2831 3230"
echo "dimensions 9248 49"
echo "New Cell"
grep "3065,46" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 28.09 17.2412 78.2198 210 1.83619 6 6
grep "3066,46" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 42.31 17.2616 78.252 210 9.86289
grep "3066,47" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 30.94 17.3031 78.2253 210 2.13253
grep "3067,46" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 31.67 17.2821 78.2842 210 2.93917
echo "New Cell"
grep "3067,17" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 35.32 16.1507 78.9842 210 2.19602 7 7
grep "3067,18" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 35.69 16.1895 78.961 210 6.56008
grep "3067,19" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 33.49 16.2281 78.9379 210 5.46735
grep "3068,16" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 27.31 16.1322 79.0394 210 2.16296
grep "3068,17" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 42.16 16.1711 79.0163 200 4.16615
grep "3068,18" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 48.1 16.2099 78.9931 210 24.642
grep "3068,19" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 49.15 16.2485 78.97 210 29.2187
grep "3069,17" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 33.98 16.1914 79.0484 210 3.68008
grep "3069,18" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 35.04 16.2302 79.0252 210 4.7225
grep "3069,19" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 34.08 16.2688 79.0021 210 6.04774
echo "New Cell"
grep "3069,09" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 31.43 15.8757 79.2349 210 3.33878 8 8
grep "3070,09" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 22.61 15.896 79.2669 292 1.05899
echo "New Cell"
grep "3071,15" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 37.63 16.154 79.159 210 1.20265 9 9
grep "3071,16" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 38.84 16.1932 79.1357 210 7.35424
grep "3072,14" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 24.34 16.1352 79.2142 210 0.616139
grep "3072,15" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 43.13 16.1743 79.1911 210 7.59137
grep "3072,16" ../TextFilesDir/out.2A25.20080401.59125.7.HDF.txt.text = 40.94 16.2135 79.1678 210 14.7196

Existem vários seq de echo "New Cell", Start, instruções de dimensões.

Eu tenho que pegar a média da coluna 10, que são 1.823, 9.36 etc. Eu tentei

awk '{ ave+= $10; n=n+1} END { if (n > 0) print ave / n; }'

que soma a décima coluna do arquivo inteiro e me dá um valor.

Mas eu quero a média entre as linhas "New Cell" do echo.

The expected out put should be. 

echo "Nova célula" Contagem = 4, média = 3,8 (por exemplo, há 4 linhas entre 2 linhas de "nova célula" de eco e a média da 10ª coluna dessas 4 linhas deve ser tomada)

echo "New Cell"

Contagem = 10, média = 6 (por exemplo, existem 10 linhas entre duas linhas de eco "nova célula" e a média da 10ª coluna dessas 10 linhas deve ser tomada)

e assim por diante. Como adicionar a instrução if no awk.

    
por geet 30.03.2018 / 19:54

1 resposta

1

Awk solução:

awk '/echo "New Cell"/{    # on encountering line with 'echo "New Cell"' 
         if (sum) {        # if calculated sum exists
             c = NR - n;   # get number of processed records
             printf "%s Count = %d, average = %.2f\n", $0, c, sum/c;
             sum = 0
         } 
         n = NR + 1        # get the initial record position/number
     }
     n{ sum += $9 }' file

A saída:

echo "New Cell" Count = 4, average = 4.19
echo "New Cell" Count = 10, average = 8.89
echo "New Cell" Count = 2, average = 2.20
    
por 30.03.2018 / 20:09

Tags