Shell-Script

我應該如何使用 jq 命令將 JSON 文件中的值替換為其 md5 值?

  • September 30, 2021

我有一個大日誌文件,其中包含如下範例:

{"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}

我想用整個文件中的值評估替換target_number的值。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}

jq沒有md5像base64那樣的直接計算功能。為此,您需要使用 shell 的實用程序。

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輸入文件的每一行併計算數字的雜湊值。

引用自:https://unix.stackexchange.com/questions/587410