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
[...]