Linux에서 json 파일을 대체하고 새 파일에 쓰는 쿼리를 작성하려고 합니다.
내 json 파일의 형식은 다음과 같습니다.
{"intents": [
{
"patterns": "'For the last 8 years of his life, Galileo was under house arrest for espousing this man's theory'",
"responses": "Copernicus"
},
{
"patterns": "'No. 2: 1912 Olympian; football star at Carlisle Indian School; 6 MLB seasons with the Reds, Giants & Braves'",
"responses": "Jim Thorpe"
},
위와 같은 항목이 약 200,000개입니다.
내가 실행한 명령은 다음과 같습니다.
jq --argjson r \
"$( jo tag = "$(curl -Ss "https://www.random.org/integers/?num=1&min=0&max=1000000&col=1&base=10&format=plain&rnd=new")")" \
'.intents[] += $r' \
< intents7.json > intents_super.json
새로 추가하고 싶어요키 이름목록에 다음과 같이상표이름과 키를 입력하고 싶습니다(상표)각각에 대해난수. 명령이 실행되었지만 지금까지 Intents_super.json 파일에 출력이 없는 상태로 30분을 기다렸습니다.
노트:CPU도 터미널에서 100%로 유지됩니다. 다음 두 줄이 표시되지만 명령은 여전히 실행 중입니다...:
Argument `tag' is neither k=v nor k@v
Argument `17208' is neither k=v nor k@v
이 명령이 내가 원하는 대로 작동하나요?
답변1
임의의 숫자를 값으로 사용하여 최상위 배열의 각 요소 tag
에 새 키를 추가하고 싶다면 다음을 수행할 수 있습니다.intents
some-command | jq -n 'input | .intents |= map(.tag = input)' intents7.json -
... 한 줄에 하나씩(예: 또는 유사) some-command
무한한 난수 스트림을 생성하는 명령은 어디에 있습니까 ?shuf -i 0-100 -r
jot -r 0
이 명령은 입력의 일반적인 읽기를 끄는 jq
옵션과 함께 사용됩니다 . -n
대신 input
다음 개체를 가져오는 데 사용됩니다.
첫 번째 객체는 파일에서 읽혀지고 수정하려는 배열을 intents7.json
포함합니다 . intents
우리는 배열의 각 요소를 수정하는 데 사용합니다 map()
. map
각 요소에 추가하는 표현식은 키를 추가 하고 tag
read 값을 사용합니다 input
. 각 호출 input
(첫 번째 호출 이후)은 표준 입력 스트림에서 읽습니다 jq
. 이 스트림에는 tag
새 키 값 에 사용되는 nonce가 있습니다 .
예제 실행(질문에 있는 데이터의 수정된 변형 사용):
$ shuf -i 0-1000 -r | jq -n 'input | .intents |= map(.tag = input)' intents7.json -
{
"intents": [
{
"patterns": "'For the last 8 years of his life, Galileo was under house arrest for espousing this man's theory'",
"responses": "Copernicus",
"tag": 517
},
{
"patterns": "'No. 2: 1912 Olympian; football star at Carlisle Indian School; 6 MLB seasons with the Reds, Giants & Braves'",
"responses": "Jim Thorpe",
"tag": 955
}
]
}
답변2
나는 다른 방법으로 문제를 해결했습니다.
od -t x -An /dev/random | tr -d " " | fold -w 8 | jq -nRc --slurpfile stream intents7.json '$stream[] .intents[] | .tag=input' > intensfinalllllll.json