AWSからいくつかのJSONログを受け取りましたが、それをクリーンアップしたいと思います。彼らはこんな感じでした...
{
"ingestionTime": 1568961184459,
"timestamp": 1568961184430,
"message": "START RequestId: 0304cf0d-da16-4d01-b4de-da8d528144ac Version: $LATEST\n",
"eventId": "34989003600358241981666605756070906630881684882471780352",
"logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
},
{
"ingestionTime": 1568961199507,
"timestamp": 1568961184432,
"message": "2019-09-20T06:33:04.432Z\t0304cf0d-da16-4d01-b4de-da8d528144ac\tAttempting to subscribe John Doe ([email protected]) to newsletter...\n",
"eventId": "34989003600402843472063667020546010973018230982964936704",
"logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
},
それから...次を使って...
{
"ingestionTime": 1568961184459,
"timestamp": 1568961184430,
"message": "START RequestId: 0304cf0d-da16-4d01-b4de-da8d528144ac Version: $LATEST\n",
"eventId": "34989003600358241981666605756070906630881684882471780352",
"logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
}
{
"ingestionTime": 1568961199507,
"timestamp": 1568961184432,
"message": "2019-09-20T06:33:04.432Z\t0304cf0d-da16-4d01-b4de-da8d528144ac\tAttempting to subscribe John Doe ([email protected]) to newsletter ...\n",
"eventId": "34989003600402843472063667020546010973018230982964936704",
"logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
}
このコマンドは次のとおりです。aws logs filter-log-events --log-group-name /aws/lambda/$npm_package_name --region us-east-2 | jq '.events[]'
\t
これが実際にタブであり、\n
最後のタブを削除できる場合は良いでしょう。または、各新しいタブのメッセージフィールドを複数の新しい行に分割します。
どうすればいいですか?私はbashについて十分に知りません。
答え1
jq
デフォルトでは、JSONでエンコードされた文字列が出力されます。
欲しい生の message
文字列、使用、-r
または--raw-output
:
jq -r .message file.json
(file.json
表示中のJSONドキュメントの場合)これにより、特定の文字列のタブと改行文字が展開されます。
答え2
BashでJSONを解析することは決してお勧めできませんが...
このラインをマッサージできれば:
"message": "newline\n\nword\tword\tword",
になる:
X_message="newline\n\nword\tword\tword"
その後、次のことができます。
$ echo -e "$X_message"
newline
word word word