Jq EOF의 숫자 리터럴이 잘못되었습니다.

Jq EOF의 숫자 리터럴이 잘못되었습니다.

Json 파일에 Raid 정보 구조에 대한 기록을 추가하려고 합니다.

jq '.raid.c0.e252.s0  +={"device": "/c0/e252/s0"}' file.json

하지만 두 가지 오류가 있습니다.

jq: error: Invalid numeric literal at EOF at line 1, column 5 (while parsing '.e252') at <top-level>, line 1:
.raid.c0.e252.s0  +={"device": "/c0/e252/s0"}
jq: error: syntax error, unexpected LITERAL, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.raid.c0.e252.s0  +={"device": "/c0/e252/s0"}
jq: 2 compile errors

몇 가지 테스트를 거친 후 필드 이름에 문제가 있다는 것을 이해했습니다. 당연히 e<number>받아들여지지 않습니다. 실제로 다음을 사용하십시오.

jq '.raid.c0.p252.s0  +={"device": "/c0/e252/s0"}' file.json

또는

jq '.raid.c0.eid252.s0  +={"device": "/c0/e252/s0"}' file.json

두 경우 모두 예상된 결과를 얻습니다.

{
  "raid": {
    "c0": {
      "eid252": {
        "s0": {
          "device": "/c0/e252/s0"
        }
      }
    }
  }
}

분명히 큰 문제는 아닙니다. 어떤 필드 이름이든 사용할 수 있지만 장치 이름으로 /c0/e252/s0쿼리를 시작하는 것이 더 간단할 것입니다..c0.e252.s0

jq 버전은 1.6인데 공식 저장소에 버전을 유지하고 싶습니다.

이 문제에 대한 해결책을 아는 사람이 있나요?

감사해요

답변1

e252이 문제는 값을 구문 분석하는 방식 으로 인해 발생합니다 .

지수( e252 = 10^252)로 처리되지만 이 표기법에는 선행 숫자(예: )가 필요합니다 1e252 = 1x10^252. 예기치 않은 형식 지정으로 인해 "잘못된 숫자 리터럴" 구문 분석 오류가 발생합니다.

분명히 문자열 리터럴을 찾고 있으므로 e252목적을 달성하려면 다음을 사용할 수 있어야 합니다.

jq '.raid.c0."e252".s0 +={"device": "/c0/e252/s0"}' < file.json

이것은 만든다:

{
  "raid": {
    "c0": {
      "eid252": {
        "s0": {
          "device": "/c0/e252/s0"
        }
      },
      "e252": {
        "s0": {
          "device": "/c0/e252/s0"
        }
      }
    }
  }
}

관련 정보