Quindi, aprire un file con cat
e quindi utilizzare grep
per ottenere le linee corrispondenti mi porta così lontano solo quando sto lavorando con il set di log specifico con cui ho a che fare. Ha bisogno di un modo per abbinare le linee a un modello, ma solo per restituire la parte della linea dopo la corrispondenza. La parte prima e dopo la partita varierà costantemente. Ho giocato usando sed
o awk
, ma non sono stato in grado di capire come filtrare la linea per eliminare la parte prima della partita, o semplicemente restituire la parte dopo la partita, funzionerà. Questo è un esempio di una linea che devo filtrare:
2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }
La parte di cui ho bisogno è tutto dopo "bloccato".
Lo sfondo dietro questo è che posso scoprire quanto spesso qualcosa si blocca:
cat messages | grep stalled | wc -l
Quello che devo fare è scoprire quante volte un certo nodo si è bloccato (indicato dalla porzione prima di ogni due punti dopo "bloccato". Se avessi solo grep per quello (cioè 20 :) potrebbe restituire linee che hanno errori soft, ma nessuna bancarella, il che non mi aiuta. Devo filtrare solo la parte bloccata in modo da poter quindi grep per un nodo specifico tra quelli bloccati.
A tutti gli effetti, questo è un sistema freebsd con utility GNU standard, ma non posso installare nulla in più per aiutare.
sed
soluzione e non trattare gli spazi bianchi in modo speciale.