次の例のような行を含む大きなログファイルがあります。
{"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
jq
md5
Base64などの直接計算機能はありません。これを行うには、シェルのユーティリティを使用する必要があります。
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}