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

答え2

私はすべてのPython機能にアクセスできるPythonからjqに触発されたツールを作成しました。

$ pip install jf

test.jsonlにデータを入れてください。

$ jf -c --import hashlib '{data_1: .data_1, target_number: hashlib.md5(str(.target_number).encode()).hexdigest(), extra_data: .extra_data}' test.jsonl
{"data_1": 210, "target_number": "620e25e6f054992308c564cb883e4940", "extra_data": 66}
{"data_1": 0, "target_number": "f83d74be3dcb71d53263aefdf08203a9", "extra_data": 56}
{"data_1": 1712, "target_number": "56ae797ad2c16813d1a6168d28b58d89", "extra_data": 48}
{"data_1": 0, "target_number": "81394a193503036fad53b8a9d6ca2456", "extra_data": 54}
{"data_1": 53, "target_number": "6f01490a5dc694e51a69b79f7dd21c24", "extra_data": 246}

編集:またはより簡単です

$ jf -c --import hashlib 'update({target_number: hashlib.md5(str(.target_number).encode()).hexdigest()})' test.json
{"data_1": 210, "target_number": "620e25e6f054992308c564cb883e4940", "extra_data": 66}
{"data_1": 0, "target_number": "f83d74be3dcb71d53263aefdf08203a9", "extra_data": 56}
{"data_1": 1712, "target_number": "56ae797ad2c16813d1a6168d28b58d89", "extra_data": 48}
{"data_1": 0, "target_number": "81394a193503036fad53b8a9d6ca2456", "extra_data": 54}
{"data_1": 53, "target_number": "6f01490a5dc694e51a69b79f7dd21c24", "extra_data": 246}

関連情報