다음 예와 같은 줄이 포함된 큰 로그 파일이 있습니다.
{"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}