2016-10-11 5 views
1

を指令するタイムスタンプを追加は、私は、次のコマンドを実行します。は出力

{"service":"serviceA-primary","server":"serverA","status":"started"} 
{"service":"service1-primary","server":"server1","status":"started"} 
{"service":"service2-primary","server":"server2","status":"started"} 
{"service":"service3-primary","server":"server3","status":"started"} 
{"service":"service4-primary","server":"server4","status":"started"} 

私は、各文字列の先頭にタイムスタンプを追加するにはどうすればよい:

sudo clustat | awk '/primary/ {print "{\"" $1 "\",\"server\":\"" $2 "\",\"status\":\""$3"\"}"}' |sed 's/\b:\b/":"/' >> test.log 

私に次のような結果を与えますか?私は別のawkまたはsedコマンドを試したが、私は自分の出力を台無しにする。

すなわち:

#!/bin/bash 
TIMESTAMP=$(date -Is) 

sudo clustat | awk -v TS="${TIMESTAMP}" ' '/primary/ {print "{"{\"timestamp\": \""TS"\", \"" $1 "\",\"server\":\"" $2 "\",\"status\":\""$3"\"}"}' |sed 's/\b:\b/":"/' >> test.log 

所望の出力は次のようになります。

{"timestamp": "2016-10-11T18:44:39+0000", "service":"serviceA-primary","server":"serverA","status":"started"} 
{"timestamp": "2016-10-11T18:44:39+0000", "service":"service1-primary","server":"server1","status":"started"} 
{"timestamp": "2016-10-11T18:44:39+0000", "service":"service2-primary","server":"server2","status":"started"} 
{"timestamp": "2016-10-11T18:44:39+0000", "service":"service3-primary","server":"server3","status":"started"} 
{"timestamp": "2016-10-11T18:44:39+0000", "service":"service4-primary","server":"server4","status":"started"} 

どのようにして所望の出力を得ることができますか?

+0

「私は異なるawkまたはsedコマンドを試しました」---質問を編集して、1つまたは複数の試行を追加してください!それはおそらくそれを修正するためのいくつかの小さなものです。 – jas

+1

オリジナルの投稿を編集しました。 –

+0

'ts'を見てください... http://unix.stackexchange.com/a/26797 –

答えて

1

基本的には引用符とバックスラッシュの一部を解読する必要があります。

また、sedコマンドをawk内のsubの呼び出しで置き換えて、すべてのコマンドを1つのコマンドに入れておきます(また、置き換えたくないタイムスタンプ内に:があるため、実際にはawk)。

$ ... | awk -v TS="${TIMESTAMP}" '/primary/ {sub(":","\":\"",$1); print "{\"timestamp\":\""TS"\", \"" $1 "\",\"server\":\"" $2 "\",\"status\":\""$3"\"}"}' 

{"timestamp":"2016-10-11T18:44:39+0000", "service":"nfssvc-primary","server":"clusternode2.example.com","status":"starting"} 
+0

私は試しましたが、タイムスタンプがありません: –

+0

私は: {"タイムスタンプ ":" "、"サービス":" service-primary "、" server ":" server "、" status ":" started "} –

+0

TIMESTAMP変数を設定しましたか?あなたの質問には、 'TIMESTAMP = $(date -Is)'があります。 – jas