jq - converte milissegundos

0

entrada json:

{
  "id": "3885",
  "login": "050111",
  "lastLoginTime": 1529730115000,
  "lastLoginFrom": "192.168.66.230"
}
{
  "id": "3898",
  "login": "050112",
  "lastLoginTime": null,
  "lastLoginFrom": null
}
O filtro

funciona quando o lastlogintime existe:

$ 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

mas há um problema (não imprime "-") quando lastlogintime não existe:

$ 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

como pular a operação de divisão para lastlogintimes vazios?

    
por Chris 23.06.2018 / 23:17

1 resposta

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

Ou seja, use um if - then - else explícito para quando lastLoginTime está definido ou não.

    
por 23.06.2018 / 23:29

Tags