Таким чином, відкриття файлу з, cat
а потім використання grep
для отримання відповідних рядків отримує мене поки що, коли я працюю з конкретним набором журналів, з яким я маю справу. Потрібен спосіб зіставлення ліній за шаблоном, але лише повернення частини рядка після відповідності. Частина до і після матчу постійно змінюватиметься. Я грав з використанням sed
або awk
, але не зміг зрозуміти, як відфільтрувати рядок, щоб видалити частину перед матчем, або просто повернути частину після матчу, або буде працювати. Це приклад рядка, який мені потрібно відфільтрувати:
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 }
Мені потрібна порція - це все, після того, як "застопорився".
Передумовою цього є те, що я можу дізнатися, як часто щось зупиняється:
cat messages | grep stalled | wc -l
Що мені потрібно зробити - це дізнатися, скільки разів певний вузол застопорився (вказується частиною перед кожною кишкою після "затримки"). Якщо я просто натискаюся на це (тобто 20 :), він може повернути лінії, які мають м'які збої, але немає кіосків, що мені не допомагає. Мені потрібно фільтрувати лише застряглий ділянку, щоб потім я міг простукати за певний вузол із тих, що затрималися.
Для всіх намірів і цілей це система freebsd зі стандартними утилітами GNU, але я не можу встановити нічого додаткового, щоб допомогти.
sed
розчин і не лікуйте пробіл спеціально.