JSONを入力してください:
{
"id": "3885",
"login": "050111",
"lastLoginTime": 1529730115000,
"lastLoginFrom": "192.168.66.230"
}
{
"id": "3898",
"login": "050112",
"lastLoginTime": null,
"lastLoginFrom": null
}
ログイン、lastLoginTime、およびlastLoginFromの出力をタブ区切り形式で取得したいと思います。
050111 1529730115000 192.168.66.230
050112 - -
以下のjqフィルタを使用すると、「-」に置き換えることができる「null」値のない出力が得られます。
$ jq -r '.|[.login, .lastLoginTime, .lastLoginFrom]|@tsv' test_json
050111 1529730115000 192.168.66.230
050112
そのようなヌル値に対して「-」を印刷する他の方法はありますか?
答え1
使用代替演算子://
だから:
$jq -r '.|[.login, .lastLoginTime // "-" , .lastLoginFrom // "-" ]|@tsv' test_json
050111 1529730115000 192.168.66.230
050112 - -
答え2
これはEchoMike444と同じ実際の機能を使用してjq
値をダッシュに変更します。null
彼らの答えしかし、別の方法で実行してください。
抽出するキーを一覧表示する代わりに、id
使用したくないキーを削除しました。その後、残りの値を抽出し、map()
ダッシュの値を次のように変更するために使用しました。null
$ jq -r '[del(.id)[]] | map(.//"-") | @tsv' file
050111 1529730115000 192.168.66.230
050112 - -
使用ミラー(mlr
)はJSON入力を読み取り、nullのすべてのフィールドをに変更します-
。次に、そのid
フィールドを除いて残りをTSVに出力します。
$ mlr --ijson --otsv --headerless-csv-output put 'for (k,v in $*) { is_null(v) { $[k] = "-" } }' then cut -x -f id file
050111 1529730115000 192.168.66.230
050112 - -