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
最後のログイン時間が空のときに分割操作をスキップする方法は?
答え1
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