Я запускаю эту команду, чтобы извлечь некоторые данные из нашего файла журнала. Я получаю полную строку, но меня интересует значение, связанное с идентификатором сообщения.
команда Я бегу -
grep -B 2 UPDATE_CHAIR_DESK_REQ Application.log | head -1000
Вывод я получаю
< MessageId :ID:414d51204541495052475731202020205143d55bf3f13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bf7f13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bf7f13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bfbf13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bfbf13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bfff13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>**
Я ищу значения перед MessageId: ID:, длина всегда составляет 48 символов. Я хочу улучшить мою команду grep, чтобы получать только эти значения в формате столбца на экране или в файле.





grep -B 2 UPDATE_CHAIR_DESK_REQ Application.log | egrep -o ':ID:.{48}'
или добавить | cut -d: -f3
С awk вы можете использовать:
awk -F'[:>]' '
$1 ~ /MessageId/ {msgId = $3}
$2 == "UPDATE_CHAIR_DESK_REQ" {print msgId}
' Application.log
Спасибо, Гленн, это сработало именно в соответствии с моими требованиями.
Чтобы получить идентификатор просто, вы можете использовать
grep -oP 'MessageId :ID:\K.{48}'