Bash scripting para processar um arquivo de dados da experiência

2

Eu tenho um arquivo .txt com um instantâneo de amostra do conteúdo mostrado abaixo. Eu tenho que somar todos os valores de campo e produzi-los. Ou seja, soma o total de CEPSDIST (MEAN), soma total de SRMR, etc. Eu quero usar scripts de bash para isso. Qualquer amostra de scripts para fazer isso?

N.B .: Eu nunca fiz scripting, mas usá-lo tornará minha experimentação e análise de dados rápidas. Estou ansioso para aprender, mas não a partir do zero, e sim a partir de um exemplo de onde posso aprender ao contrário.

Individual results
[0001 of 0002]
TARGET   : cheb_M_10_mic_F01_sa1.wav
REFERENCE: orig_mic_F01_sa1.wav
    TIMEDIFF       :      0 samples (0.000 s)
    CEPSDIST (MEAN):   6.96 dB
    CEPSDIST (MED) :   6.74 dB
    SRMR           :   1.06
    LLR      (MEAN):   1.75
    LLR      (MED) :   2.00
    FWSEGSNR (MEAN):  -4.17 dB
    FWSEGSNR (MED) :  -6.12 dB
    PESQ           :   0.07

[0002 of 0002]
TARGET   : cheb_M_20_mic_F01_sa1.wav
REFERENCE: orig_mic_F01_sa1.wav
    TIMEDIFF       :      0 samples (0.000 s)
    CEPSDIST (MEAN):   6.75 dB
    CEPSDIST (MED) :   6.50 dB
    SRMR           :   1.32
    LLR      (MEAN):   1.70
    LLR      (MED) :   2.00
    FWSEGSNR (MEAN):  -3.84 dB
    FWSEGSNR (MED) :  -5.82 dB
    PESQ           :   0.05
    
por Neeks 29.12.2015 / 07:56

1 resposta

2

Você pode fazer isso com awk :

Aqui o arquivo extract.awk

BEGIN 
{
    SRMR = 0;
}
{
    if($1 == "SRMR") {SRMR += $3}  
}
END 
{
    print "SRMR sum is: " SRMR;
}

E use desta forma:

awk -f extract.awk < your_data_file

EDITAR:

Todos os seus campos não serão extraídos da mesma maneira. Para entender como um arquivo é analisado com o awk, você pode usar este arquivo de depuração básico:

# debug.awk
{
    print "For line '" $0 "'"
    print "$1 is '" $1 "'"   
    print "$2 is '" $2 "'"   
    print "$3 is '" $3 "'"   
    print "$4 is '" $4 "'"   
    print "$5 is '" $5 "'"   
    print "$6 is '" $6 "'"
    print ""
}
    
por 29.12.2015 / 08:19