Blog

Análisis de un fichero de log con sed y R

Análisis de un fichero de log con sed y R

Tengo un fichero de log con este formato:
[...]
2016-08-27T12:33:53.044110+02:00             INFO                167772878: Petición de infoetiqueta
2016-08-27T12:33:56.929876+02:00             INFO                167772849: Petición de infoetiqueta
2016-08-27T12:34:23.054716+02:00             INFO                167772878: Petición de infoetiqueta
2016-08-27T12:34:31.201453+02:00             INFO                180003052: Petición de infoetiqueta
2016-08-27T12:34:59.897806+02:00             INFO                180003238: Petición de infoetiqueta
2016-08-27T12:35:39.861030+02:00             INFO                180003238: Petición de infoetiqueta
2016-08-27T12:36:09.809794+02:00             INFO                180003238: Petición de infoetiqueta
[...]
Quería analizar las frecuencias de cada «dispositivo» (a la izquierda de «Petición de infoetiqueta»). Para ello, eliminé toda la información restante, mediante los capturing groups de sed:
sed -r 's/.*INFO\s*(.*):.*/\1/' updates.get_xmpp.log > resultado.txt
Viendo resultado.txt:
[...]
167772878
167772849
167772878
180003052
180003238
180003238
180003238
[...]
Instalé R:
dnf install R
Iniciar escribiendo «R». Leemos resultado.txt:
> lin <- scan("resultado.txt", "")
Read 66121 items
[/code]

table nos muestra las frecuencias:

[code]
> table(lin)
lin
0190780041253     0696pc003     0696pc010     0696pc024     0696pc027 
            3             3             1             1             2 
    0696pc102     0696pc105     0696pc107     0696pc110     0696pc111 
            3             2             3             1             4 
    0696pc113     0696pc117     0696pc118      0696pc25      0696pc26 
           19             3             5             1             5 
[...]
Para mostrarlo como dos columnas valor-frecuencia:
> t = as.data.frame(table(lin))
> t
              lin Freq
1   0190780041253    3
2       0696pc003    3
3       0696pc010    1
4       0696pc024    1
5       0696pc027    2
6       0696pc102    3
7       0696pc105    2
8       0696pc107    3
9       0696pc110    1
10      0696pc111    4
11      0696pc113   19
12      0696pc117    3
13      0696pc118    5
14       0696pc25    1
15       0696pc26    5
[...]
Para escribirlo en un fichero:
> write.table(t, "frecuencias.txt", sep="\t")
Queda:
"lin"   "Freq"
"1"     "0190780041253" 3
"2"     "0696pc003"     3
"3"     "0696pc010"     1
"4"     "0696pc024"     1
"5"     "0696pc027"     2
[...]