Portanto, abrir um arquivo cat
e usá grep
-lo para obter linhas correspondentes só me leva a um ponto em que estou trabalhando com o conjunto de logs específico com o qual estou lidando. Ele precisa de uma maneira de corresponder linhas a um padrão, mas apenas para retornar a parte da linha após a correspondência. A parte antes e depois da partida variará consistentemente. Eu brinquei com o uso de sed
ou awk
, mas não consegui descobrir como filtrar a linha para excluir a parte antes da partida ou apenas retornar a parte após a partida, ou funcionará. Este é um exemplo de uma linha que eu preciso filtrar:
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 }
A parte que eu preciso é tudo depois de "parado".
O pano de fundo por trás disso é que eu posso descobrir com que frequência algo pára:
cat messages | grep stalled | wc -l
O que eu preciso fazer é descobrir quantas vezes um determinado nó parou (indicado pela parte antes de cada dois pontos depois de "parado". Se eu apenas esperar por isso (ou seja, 20 :), ele pode retornar linhas que apresentam falhas suaves, mas sem interrupções, o que não me ajuda.Preciso filtrar apenas a parte paralisada para que eu possa receber um nó específico daqueles que pararam.
Para todos os efeitos, este é um sistema freebsd com utilitários padrão do GNU, mas não consigo instalar nada extra para ajudar.
sed
solução e não trate especialmente os espaços em branco.