jqコマンドを使用してJSONファイルの値をmd5値に置き換えるにはどうすればよいですか?

jqコマンドを使用してJSONファイルの値をmd5値に置き換えるにはどうすればよいですか?

次の例のような行を含む大きなログファイルがあります。

{"data_1":210,"target_number":1096748811,"extra_data":66}
{"data_1":0,"target_number":7130881445,"extra_data":56}
{"data_1":1712,"target_number":1098334917,"extra_data":48}
{"data_1":0,"target_number":3062674667,"extra_data":54}
{"data_1":53,"target_number":5110609228,"extra_data":246}

変えたい目標番号価値とmd5価値の評価フルファイル

jq次の基本構文を使用してコマンドを試しています。

jq  '.target_number|= "md5(\(.))"' input2.log

期待される出力例:

{"data_1":210,"target_number":620e25e6f054992308c564cb883e4940,"extra_data":66}

電流出力例:

{"data_1":210,"target_number":md5(1096748811),"extra_data":66}

ベストアンサー1

jqmd5Base64などの直接計算機能はありません。これを行うには、シェルのユーティリティを使用する必要があります。

jq -c . input.log |
while IFS= read -r obj; do 
    md5sum=$( printf '%s' "$obj" | jq -j '.target_number' | md5sum | cut -d' ' -f1)
    jq -c --arg md5 "$md5sum" '.target_number = $md5' <<<"$obj"
done > output.json

結果のハッシュmd5sumはから数字として解釈することはできず、jq文字列値としてのみ解釈されます。したがって、引用符で囲むでしょう。

jqこのアプローチは、入力ファイルの各行を個別に呼び出し、その数値のハッシュを計算するため、速度が遅くなると予想されます。

おすすめ記事