
我對 shell 腳本和 jq 工具建立帶有時間戳記的 json 檔案有疑問。
echo "{\"vtg\":[$value]}" | jq -a '. + {date: now|strflocaltime("%r")}' > sample.json
透過這個命令,我得到了下面的 json 檔。
{
"vtg": [
11.769,
11.769,
11.339,
11.788,
11.867,
11.886,
11.808,
11.339,
11.554,
11.182
],
"date": "03:31:52 PM"
}
但我想要時間戳,
"date": [
15,
31,
52
]
什麼時候
strptime("%H:%M:%SZ")
我應該以我想要的格式獲得時間戳。但它給了我錯誤:
jq: error (at <stdin>:10): strptime/1 requires string inputs and arguments
有人可以幫我如何取得 JSON 檔案中的時間戳記嗎?
答案1
此strptime()
函數用於解析格式化的時間(與它相反strftime()
)。你要strftime()
。
使用jq
:
jq -n 'now as $t | { date: [ ($t|strftime("%H")), ($t|strftime("%M")), ($t|strftime("%S")) ] }'
這用於strftime()
格式化函數給出的時間now
。用於strflocaltime()
將時間轉換為當地時間。
如果這太冗長或看起來效率低下(我們實際上strftime()
為數組的每個元素調用一次date
!),那麼請考慮創建一個HH:MM:SS
時間戳細繩,然後將其拆分為冒號:
jq -n '{ date: (now | strftime("%H:%M:%S") | split(":")) }'
上述任一命令都可能產生
{
"date": [
"07",
"01",
"23"
]
}
完整腳本(用於根據命名數組的值jo
安全地建立初始數組):vtg
bash
#!/bin/bash
value=(11.769 11.769 11.339 11.788 11.867 11.886 11.808 11.339 11.554 11.182)
jo vtg="$( jo -a "${value[@]}" )" |
jq '. += now as $t | { date: [ ($t|strftime("%H")), ($t|strftime("%M")), ($t|strftime("%S")) ] }'
# or...
jo vtg="$( jo -a "${value[@]}" )" |
jq '. += { date: (now | strftime("%H:%M:%S") | split(":")) }'
jo
顯然,您也可以透過從命令讀取來動態建立資料的日期部分date
:
jo vtg="$( jo -a "${value[@]}" )" \
date="$( jo -a $( date +'%H %M %S' ) )"
這依賴 shell 將輸出從date
格式字串中的空格分開。您將從上面獲得當地時間。
該jo
工具可從https://jpmens.net/2016/03/05/a-shell-command-to-create-json-jo/