Newsgroup: it.comp.os.linux.iniziare
Titolo: Minimo valore giornaliero su un file di log

Ho un file di log in cui sono registrati dei valori separati giorno per giorno
da una riga vuota:
 
[cut]
Thu, 14 Mar 2013 19:17:01 +0100 TX 63.00 - RX 60.38
Thu, 14 Mar 2013 20:17:02 +0100 TX 82.69 - RX 59.06
Thu, 14 Mar 2013 21:17:01 +0100 TX 38.06 - RX 28.88
Thu, 14 Mar 2013 22:17:01 +0100 TX 30.19 - RX 24.94
Thu, 14 Mar 2013 23:17:02 +0100 TX 77.44 - RX 86.62
 
Sun, 17 Mar 2013 22:17:02 +0100 TX 80.06 - RX 97.12
Sun, 17 Mar 2013 23:17:02 +0100 TX 80.06 - RX 85.31
[cut]
 
Ora io debbo evidenziare il valore minimo della voce RX di ogni giorno.
Come evidenziazione, pensavo a qualcosa tipo questo:
 
[cut]
Thu, 14 Mar 2013 19:17:01 +0100 TX 63.00 - RX 60.38
Thu, 14 Mar 2013 20:17:02 +0100 TX 82.69 - RX 59.06
Thu, 14 Mar 2013 21:17:01 +0100 TX 38.06 - RX 28.88
Thu, 14 Mar 2013 22:17:01 +0100 TX 30.19 -              RX 24.94
Thu, 14 Mar 2013 23:17:02 +0100 TX 77.44 - RX 86.62
 
Sun, 17 Mar 2013 22:17:02 +0100 TX 80.06 - RX 97.12
Sun, 17 Mar 2013 23:17:02 +0100 TX 80.06 -              RX 85.31
[cut]
 
Ossia aggiungere un paio di TAB prima di RX.
Questo per tutto il log (che conta alcune centinaia di righe).
 
Come posso fare?
 
 
 
P.S. bash su un sistema debian.
 
-- 
+---------------------------------------------------------------------------+
|           Io sono una persona che non conta.                              |
|           Gli altri contano su di me.     1  2  3  4   .....              |
+-----#43--------------------Diamanti di saggezza.--------------------------+

 Come posso fare?
 
sed, awk.
 
Ciao Jack
-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?

 Come posso fare?
 
Usare bash mi sembra una soluzione scomoda, comunque puoi pensare di
  leggere il file con while-read;
  identificare i giorni con cut|sort|uniq;
  ciclare su questo insieme eventualmente con grep della data;
  trovare il minimo con cut|sort;
  modificare il file con ed usando come condizione g// la data e il 
valore minimo e una subst per aggiungere il tab.
 
Questa è quello che mi viene in mente, può essere più o meno complicato 
a seconda della versione di bash che hai istallata.
Io userei uno qualsiasi degli interpreti che hai sulla macchina, ad 
esempio perl o qualsiasi linguaggio con cui tu sia più familiare.

 [cut]
 
Pessima idea. Pensato a non evidenziare niente? O ad una asterisco?
 
Usa AWK LuKe!
 

 sed, awk.
 
sed serve per sostituire stringhe o poco più, per lavori 
seri è una spina nel culo. Usa AWK o PERL.

   sort -k11 -n myapp.log | tee >/dev/null >(head -n2) >(tail -n1)
 
Non va bene. Debbo monitorare una connessione power-line (da cui il log) e
vedere cosa cavolo mi fa calare il segnale.
Ho notato che in certe ore del giorno la velocitï¿œ scende a valori bassissimi.
Per capire la causa, mi interessa scoprire in quale ora (o ore) il segnale va
bassissimo.
Evidenziare nel log (o sua copia) le righe con il segnale piï¿œ basso mi dovrebbe
far capire il problema.
L'esempio di mettere dei tab era solo un esempio, mi va bene una serie di
asterischi, alla fine della riga, od altro. Basta che scorrendolo (il log)
possa identificare il picco minimo ed i valori al suo intorno.
Nel pezzo di log postato, ho messo degli intervalli di 1 ora, ma in pratica le
letture sono piï¿œ fitte.
Trovare il valore minimo in un file (o in una serie di valori) non ï¿œ difficile,
lo ï¿œ se lo devo fare su tanti singoli intervalli non tutti uguali di quel
file; in un giorno posso avere 1 lettura ed in altri 10-20-30 letture, per
questo che avevo separato con uno script bash le letture giorno per giorno con
una riga vuota (ma posso usare qualsiasi separatore).
Mi serve un suggerimento sulla strategia da usare per fare questo:
Debbo trovare il valore minimo per ogni singolo giorno, per identificare cosa
mi attenua il segnale e vedere i vari elettrodomestici ed ammenicoli vari
quanto influiscono.
 
 
-- 
+---------------------------------------------------------------------------+
|  Se fai rifornimento dopo le 22,30 aumentiamo i prezzi di soli            |
|  70 centesimi al litro.                                                   |
+-----#7---------------------Campagna contro le pubblicita` idiote.---------+

 valore minimo e una subst per aggiungere il tab.
 
Circa! Il problema ï¿œ fare l'operazione ad ogni singolo blocco separato da riga
vuota (o quello che voglio mettere come separatore).
Come scritto anche in risposta a mallin.shetland devo evidenziare l'orario col
valore minimo (segnale ricezione di power-line) giorno per giorno per capire
cosa mi crea l'attenuazione.


 esempio perl o qualsiasi linguaggio con cui tu sia più familiare.
 
Quello che hai scritto mi ha dato un paio di buone idee.
Se a qualcuno interessa, ho messo in rete lo script[1].
Magari si puó scrivere meglio, ma funziona discretamente bene.
Ho usato un array come buffer per analizzare i blocchi giornalieri ed ho messo
degli asterischi finali anziché un TAB sull'ultimo valore...
 
[1]  zzz.log analisys    
http://pastebin.com/B9FKdJep
 
 
-- 
+---------------------------------------------------------------------------+
| ... e come dissero Gargantua e Pantagruel al termine di un lauto pranzo:  |
|     Anche oggi abbiamo contribuito a ridurre la fame nel mondo...         |
+-----#26--------------------Campagna contro le pubblicita` idiote.---------+