Więc pociągnięcie do otwarcia pliku za pomocą, cat
a następnie użycie grep
do uzyskania pasujących linii prowadzi mnie tylko do tej pory, gdy pracuję z określonym zestawem dzienników, z którym mam do czynienia. Potrzebuje sposobu, aby dopasować linie do wzoru, ale tylko zwrócić część linii po dopasowaniu. Część przed i po meczu będzie się stale różnić. Grałem przy użyciu sed
lub awk
, ale nie byłem w stanie dowiedzieć się, jak filtrować wiersz, aby usunąć część przed meczem lub po prostu zwrócić część po meczu, albo zadziała. To jest przykład linii, którą muszę filtrować:
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 }
Porcja, której potrzebuję, to wszystko po „utknięciu w martwym punkcie”.
Tłem tego jest to, że mogę dowiedzieć się, jak często coś się zatrzymuje:
cat messages | grep stalled | wc -l
Muszę dowiedzieć się, ile razy jakiś węzeł utknął (wskazany przez część przed każdym dwukropkiem po „utknięciu w martwym punkcie”). Jeśli po prostu grepuję za to (tj. 20 :), może zwrócić linie, które mają soft, ale zawodzą, ale żadnych przeciągnięć, co mi nie pomaga. Muszę odfiltrować tylko zatrzymany odcinek, aby móc grepować dla określonego węzła z zatrzymanych.
Pod każdym względem jest to system freebsd ze standardowymi narzędziami GNU, ale nie mogę zainstalować niczego dodatkowego, aby pomóc.
sed
rozwiązanie i nie traktuj specjalnie białych znaków.