Formatting

Good day All,
I have requirement where my input data looks like below

[2014-04-03T23:15:45.717-08:00] [servername] [NOTIFICATION] [] [message1] [message2 [ACTIVE]] [userId] [Message3] [mesage4] Message5

Expecting Output as

04/MAR/2104 ||| 23:15:45 ||| servername ||| NOTIFICATION |||message1|||[message2 [ACTIVE]|||userId|||[Message3||| [mesage4]||| Message5

I could not use space delimiter as in the messages I would be having them as well .

Hi,

If all other records in your input file are as per sample input provided . then you can try with this one :-

sed -e 's/\[\]//g' -e 's/\] \[/|/g' -e 's/\]  \[/|/g' -e 's/\] /|/g' -e 's/\] /|/g' filename.txt | awk -F "|" 'BEGIN {X["01"] = "Jan"; X["02"] = "Feb";X["03"] = "Mar" ; ORS="|||"} NF > 1{print substr($1,7,2)"/"X[substr($1,10,2)]"/"substr($1,2,4)"|||"substr($1,13,8);for(i=2;i<=NF;i++){print $i} print "\n"}' | sed -e 's/^|||//g' -e 's/|||$//g'

input file

>cat filename.txt
[2014-04-03T23:15:45.717-08:00] [servername] [NOTIFICATION] [] [message1] [message2 [ACTIVE]] [userId] [Message3] [mesage4] Message5
[2014-01-03T23:15:45.717-08:00] [servername] [NOTIF] [] [message1] [message2 [ACTIVE]] [userId] [Message3] [mesage4] Message5
[2014-03-01T23:15:45.717-08:00] [sname] [NOTIFICATION] [] [message1] [message2 [ACTIVE]] [userId] [Message3] [mesage4] Message5

output :-

04/Mar/2014|||23:15:45|||servername|||NOTIFICATION|||message1|||message2 [ACTIVE]|||userId|||Message3|||mesage4|||Message5
01/Mar/2014|||23:15:45|||servername|||NOTIF|||message1|||message2 [ACTIVE]|||userId|||Message3|||mesage4|||Message5
03/Jan/2014|||23:15:45|||sname|||NOTIFICATION|||message1|||message2 [ACTIVE]|||userId|||Message3|||mesage4|||Message5

Thank you this worked ! . Awesome :b: