0

I am running this command to extract some data from our log file. I am getting full line but what I am interested in the value associated with Message ID.

command I am Running -

grep -B 2 UPDATE_CHAIR_DESK_REQ Application.log | head -1000

Output I am getting

< 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>**

What I am looking for is the values in front of MessageId :ID: , it is always of 48 characters in length. I want to enhance my grep command to get only these values in a column format either on screen or on file.

glenn jackman
  • 238,783
  • 38
  • 220
  • 352
Vikas B
  • 13
  • 2

2 Answers2

1
grep -B 2 UPDATE_CHAIR_DESK_REQ Application.log | egrep -o ':ID:.{48}' 
Nick Ellis
  • 1,048
  • 11
  • 24
0

With awk, you could use:

awk -F'[:>]' '
    $1 ~ /MessageId/ {msgId = $3}
    $2 == "UPDATE_CHAIR_DESK_REQ" {print msgId}
' Application.log
glenn jackman
  • 238,783
  • 38
  • 220
  • 352