質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

Json形式の出力結果を指定して、1行に出力する方法

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 5,120

score 49

AWSのcloudtrailのイベントをCLIで取得しようとすると、結果がJson形式で出力されます。
そのままですと見づらいので「Username」「EventTime」「EventName」のみを出力させるため、以下のようにコマンドを実行しました。

# aws cloudtrail lookup-events --output json | jq '.Events[]' | jq '.Username,.EventTime,.EventName'

この場合、「Username」「EventTime」「EventName」が1行にまとまらず、改行が入ってしまいます。
===
"root"
1433738037
"RebootInstances"
===

これを、"root":1433738037:"RebootInstances"のように1行に出力させたいのですが、どのようにコマンドを実行すればよいのでしょうか。


■以下、JSON形式の出力結果(一部値を変更しています)

{
    "Events": [
        {
            "EventId": "452ee0a8-4897-4145-b0f5-123456789",
            "Username": "root",
            "EventTime": 1433738037.0,
            "CloudTrailEvent": "{\"eventVersion\":\"1.02\",\"userIdentity\":{\"type\":\"Root\",\"principalId\":\"123456789\",\"arn\":\"arn:aws:iam::123456789:root\",\"accountId\":\"123456789\",\"accessKeyId\":\"hogehoge\",\"sessionContext\":{\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2015-06-08T04:31:59Z\"}}},\"eventTime\":\"2015-06-08T04:33:57Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"RebootInstances\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"1.2.3.4\",\"userAgent\":\"console.ec2.amazonaws.com\",\"requestParameters\":{\"instancesSet\":{\"items\":[{\"instanceId\":\"i-123456\"}]}},\"responseElements\":{\"_return\":true},\"requestID\":\"5cf67047-3035-4543-ae15-123456789\",\"eventID\":\"452ee0a8-4897-4145-b0f5-123456789\",\"eventType\":\"AwsApiCall\",\"recipientAccountId\":\"123456789\"}",
            "EventName": "RebootInstances",
            "Resources": [
                {
                    "ResourceType": "AWS::EC2::Instance",
                    "ResourceName": "i-123456"
                }
            ]
        },
        {
            "EventId": "f3094eba-c427-4d28-900e-123456789",
            "Username": "root",
            "EventTime": 1433737919.0,
            "CloudTrailEvent": "{\"eventVersion\":\"1.02\",\"userIdentity\":{\"type\":\"Root\",\"principalId\":\"123456789\",\"arn\":\"arn:aws:iam::123456789:root\",\"accountId\":\"123456789\"},\"eventTime\":\"2015-06-08T04:31:59Z\",\"eventSource\":\"signin.amazonaws.com\",\"eventName\":\"ConsoleLogin\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"1.2.3.4\",\"userAgent\":\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36\",\"requestParameters\":null,\"responseElements\":{\"ConsoleLogin\":\"Success\"},\"additionalEventData\":{\"LoginTo\":\"https://console.aws.amazon.com/console/home?nc2\\u003dh_m_mc\\u0026state\\u003dhashArgs%23\\u0026isauthcode\\u003dtrue\",\"MobileVersion\":\"No\",\"MFAUsed\":\"No\"},\"eventID\":\"f3094eba-c427-4d28-900e-123456789\",\"eventType\":\"AwsApiCall\",\"recipientAccountId\":\"123456789\"}",
            "EventName": "ConsoleLogin",
            "Resources": []
        }
    ]
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

jq の -c (--compact-output) &リストにすると 1行に出力されますので、後は sed などで整形すればいいと思います。
jq -M -c '.Events[] | [.Username, .EventTime, .EventName]' | sed -e 's/^\[//' -e 's/\]$//' -e 's/,/:/g'

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/09 09:56

    TaichiYanagiya様
    回答頂きありがとうございます。

    頂きましたコマンドで、こちらの意図した形で出力できました。

    jqコマンドのオプションや使い方が分かっていないところがあるので、jqコマンドの使い方を学ぼうと思います。

    キャンセル

0

最後に
 | tr '\n' ':'
をつけて改行を:に置換してしまえばうまくいきませんか?

aws cloudtrail lookup-events --output json | jq '.Events[]' | jq '.Username,.EventTime,.EventName' | tr '\n' ':'

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/08 17:42

    hsarow様
    回答頂きありがとうございます。

    私の書き方が悪かったのですが、
    ===
    "root"
    1433738037
    "RebootInstances"
    ===
    1つのイベント毎に上記が出力されるので、複数イベントあると、以下のようになります。
    ===
    "root"
    123456789
    "RebootInstances"
    "root"
    987654321
    "RebootInstances"
    ===
    その為、trで置き換えると、
    "root" :123456789:"RebootInstances" :"root" :987654321 :"RebootInstances"
    となります。

    できれば、以下のように1イベント毎にまとめられないかと思ったのですが、上手くできていません。
    "root" :123456789:"RebootInstances"
    "root" :987654321 :"RebootInstances"

    ------
    sharow様の回答から、以下のようにまわりくどいことをして、「,\n」を「:」に置き換えればできそうになってきました。
    ただ、現在以下の「,\n」をsedで置き換えようとすると、置き換えられないので現在も試行錯誤しています。

    ※下記の結果をファイルに保存して、「od -c」コマンドで確認すると「,\n」なのですが、sedの条件に「,\n」しても置き換えられないので、何が悪いのか理解できていない状態です。sed -e 's/,\n/:/g' これを追加して実行しても結果は変わりませんでした。

    # aws cloudtrail lookup-events --output json | jq '.Events[]' | jq '[.Username,.EventTime,.EventName]' | sed '/\[/d' | sed '/\]/d' | sed -e 's/^ //g'
    ===
    "root",
    123456789,
    "RebootInstances"
    "root",
    987654321,
    "RebootInstances"
    ===

    キャンセル

  • 2015/06/08 18:30

    なるほど複数あるのですね、質問をちゃんと読んでいませんでした。
    TaichiYanagiyaさんの方法ではうまくいきませんか?

    キャンセル

  • 2015/06/09 09:58

    質問投稿時に質問内容を明確にできておらず失礼いたしました。
    今回、TaichiYanagiya様の方法でこちらの意図した形で出力できました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る