Json
jq - 轉換毫秒
輸入json:
{ "id": "3885", "login": "050111", "lastLoginTime": 1529730115000, "lastLoginFrom": "192.168.66.230" } { "id": "3898", "login": "050112", "lastLoginTime": null, "lastLoginFrom": null }
當 lastlogintime 存在時過濾器起作用:
$ jq -jr --arg ARG1 050111 'select(.login==$ARG1)|"user:", " ",.login,"\n","lastlogintime:", " ",(.lastLoginTime / 1000 | strftime("%Y-%m-%d %H:%M UTC")),"\n","lastloginfrom:", " ",.lastLoginFrom // "-","\n"' test_json3 user: 050111 lastlogintime: 2018-06-23 05:01 UTC lastloginfrom: 192.168.66.230
但是當 lastlogintime 不存在時出現問題(不列印“-”):
$ jq -jr --arg ARG1 050112 'select(.login==$ARG1)|"user:", " ",.login,"\n","lastlogintime:", " ",(.lastLoginTime / 1000 | strftime("%Y-%m-%d %H:%M UTC")),"\n","lastloginfrom:", " ",.lastLoginFrom // "-","\n"' test_json3 user: 050112 jq: error (at test_json3:12): null (null) and number (1000) cannot be divided
如何跳過空lastlogintimes的除法操作?
jq -r --arg ARG1 050112 'select(.login == $ARG1)| ["user:", .login], ["lastlogintime:", if .lastLoginTime then (.lastLoginTime/1000 | strftime("%Y-%m-%d %H:%M UTC")) else "-" end], ["lastloginfrom:", .lastLoginFrom // "-"] |@tsv' file.json
也就是說,使用顯式
if
-then
-else
表示何時lastLoginTime
定義或未定義。