2017-08-07 23 views
0

RAWファイルJSON:エポックタイムスタンプを変換する - JQ:エラー(<stdin>時):できませんインデックス文字列の文字列と、「タイムスタンプ」

$ < galera-healthcheck.stdout.log jq '.' | head -n 40 
{ 
    "timestamp": "1499779398.544612646", 
    "source": "Galera Healthcheck", 
    "message": "Galera Healthcheck.Opened DB connection", 
    "log_level": 1, 
    "data": { 
    "dbHost": "0.0.0.0", 
    "dbPort": 3306, 
    "dbUser": "galera-healthcheck" 
    } 
} 
{ 
    "timestamp": "1499779398.544713974", 
    "source": "Galera Healthcheck", 
    "message": "Galera Healthcheck.Serving healthcheck endpoint", 
    "log_level": 1, 
    "data": { 
    "url": "http://0.0.0.0:9200/" 
    } 
} 
{ 
    "timestamp": "1499779398.544794559", 
    "source": "Galera Healthcheck", 
    "message": "Galera Healthcheck.Attempting to GET endpoint...", 
    "log_level": 1, 
    "data": { 
    "url": "http://0.0.0.0:9200/" 
    } 
} 
{ 
    "timestamp": "1499779398.545407295", 
    "source": "Galera Healthcheck", 
    "message": "Galera Healthcheck.Failed to process request", 
    "log_level": 2, 
    "data": { 
    "error": "Cannot get status from galera" 
    } 
} 
{ 
    "timestamp": "1499779398.545511246", 

私は、同じRAWファイルが、人間が読める形式でタイムスタンプを願っています。

< galera-healthcheck.stdout.log jq 'map(if .timestamp then .timestamp |= todate else . end)' 

をして、ファイル内のすべての行の最初の答えの後

(...) 
jq: error (at <stdin>:968): Cannot index string with string "timestamp" 
jq: error (at <stdin>:969): Cannot index string with string "timestamp" 
jq: error (at <stdin>:970): Cannot index string with string "timestamp" 
jq: error (at <stdin>:971): Cannot index string with string "timestamp" 
jq: error (at <stdin>:972): Cannot index string with string "timestamp" 
jq: error (at <stdin>:973): Cannot index string with string "timestamp" 
jq: error (at <stdin>:974): Cannot index string with string "timestamp" 
jq: error (at <stdin>:975): Cannot index string with string "timestamp" 
jq: error (at <stdin>:976): Cannot index string with string "timestamp" 
jq: error (at <stdin>:977): Cannot index string with string "timestamp" 
jq: error (at <stdin>:978): Cannot index string with string "timestamp" 
jq: error (at <stdin>:979): Cannot index string with string "timestamp" 
jq: error (at <stdin>:980): Cannot index string with string "timestamp" 
jq: error (at <stdin>:981): Cannot index string with string "timestamp" 
jq: error (at <stdin>:982): Cannot index string with string "timestamp" 
jq: error (at <stdin>:983): Cannot index string with string "timestamp" 
jq: error (at <stdin>:984): Cannot index string with string "timestamp" 
jq: error (at <stdin>:985): Cannot index string with string "timestamp" 
jq: error (at <stdin>:986): Cannot index string with string "timestamp" 
jq: error (at <stdin>:987): Cannot index string with string "timestamp" 
jq: error (at <stdin>:988): Cannot index string with string "timestamp" 
jq: error (at <stdin>:989): Cannot index string with string "timestamp" 
jq: error (at <stdin>:990): Cannot index string with string "timestamp" 
jq: error (at <stdin>:991): Cannot index string with string "timestamp" 
jq: error (at <stdin>:992): Cannot index string with string "timestamp" 
jq: error (at <stdin>:993): Cannot index string with string "timestamp" 
jq: error (at <stdin>:994): Cannot index string with string "timestamp" 
jq: error (at <stdin>:995): Cannot index string with string "timestamp" 
jq: error (at <stdin>:996): Cannot index string with string "timestamp" 
jq: error (at <stdin>:997): Cannot index string with string "timestamp" 
jq: error (at <stdin>:998): Cannot index string with string "timestamp" 

更新このエラーを得た:

は、私が試した 'マップ' に

ドロップコールを。

'todate'は入力が数値であることを想定していますので、 'tonumber'への呼び出しを追加する必要があります。まだエポック形式で

タイムスタンプ、読める人間ではない:

< galera-healthcheck.stdout.log jq '(if .timestamp then .timestamp |= tonumber else . end)' | head 
{ 
    "timestamp": 1499779398.5446126, 
    "source": "Galera Healthcheck", 
    "message": "Galera Healthcheck.Opened DB connection", 
    "log_level": 1, 
    "data": { 
    "dbHost": "0.0.0.0", 
    "dbPort": 3306, 
    "dbUser": "galera-healthcheck" 
    } 

答えて

1
  1. 'マップ' にコールをドロップします。

  2. 'toDateまでは、' あなたは 'TONUMBER' に呼び出しを追加する必要がありますので、その入力は、数値であることを期待:

    .timestamp |= (tonumber|todate) 
    
+0

は、 "追加" "追加" を意味します。 – peak

関連する問題