2016-03-01 25 views
-2

如何編輯SED,AWK或者別的以下行:如何編輯下面的SED,AWK或者別的線

[email protected]:/tmp# cat /tmp/log 
2016-03-01 06:08:26  {"id":"778640","cuid":"1","msid":"199033","lid":"582","Started":"1","qid":"9401"} batch is running 

,使它看起來像下面:

2016-03-01 06:08:26  "msid":"199033" batch is running 

2016-03-01 06:08:26  msid is 199033 batch is running 

2016-03-01 06:08:26  msid=199033 batch is running 
+6

你應該選擇你想要的輸出... – Tensibai

回答

2
$ awk -F'[{,}]' '{print $1, $4, $NF}' file 
2016-03-01 06:08:26  "msid":"199033" batch is running 
2

最安全的方法是使用JSON解析器解析JSON字符串,如JSON

use strict; 
use warnings; 
use JSON; 

my $str = '2016-03-01 06:08:26  {"id":"778640","cuid":"1","msid":"199033","lid":"582","Started":"1","qid":"9401"} batch is running'; 
my ($date, $time, $json, $msg) = split ' ', $str, 4; 
my $hash = decode_json($json); 
print join " ", $date, $time, "msid=" . $hash->{msid}, $msg; 

輸出:

2016-03-01 06:08:26 msid=199033 batch is running