다음 콘텐츠가 포함된 JSON 파일을 사용하세요.
{"major":a, "minor":b, "hotfix":c}
jq
다음 출력을 생성하기 위해 사용하려는 것 :
a.b.c
jq
예를 들어 별도의 명령을 사용했는데 jq .major
필요한 것을 개별적으로 얻을 수 있었지만 한꺼번에 수행하는 것, 특히 포인트를 추가하는 것은 나에게 어려웠습니다.
감사해요.
답변1
jq에는 이러한 상황에 맞는 조인 기능이 있습니다.
jq '[.major,.minor,.hotfix] | map (tostring) | join(".")'
map
값이 이미 문자열인 경우 생략할 수 있습니다.
답변2
jq
명령 대체에서 명령 시퀀스를 명령 사이의 마침표를 하드코딩하는 변수 할당에 사용합니다 .
output="$(jq .major ...)"."$(jq .minor ...)"."$(jq .hotfix ...)"
답변3
jq -j '.major, ".", .minor, ".", .hotfix, "\n"' file
누군가 이해하지 못하는 경우를 대비해 매뉴얼 페이지에는 다음과 같이 나와 있습니다.
"hello" 또는 42와 같은 리터럴도 필터입니다. 입력을 허용하지만 항상 출력과 동일한 리터럴을 생성합니다.
....
, 두 필터가 쉼표로 구분되면 입력이 두 필터 모두에 공급되고 여러 출력이 발생합니다. 먼저 왼쪽 표현식에 의해 생성된 모든 출력, 그런 다음 오른쪽 표현식에 의해 생성된 모든 출력입니다.
| map | join
따라서 이러한 간단한 경우에는 복잡한 문제가 필요하지 않습니다. 어쩌면 매뉴얼 페이지가 더 잘 구성되어야 할 수도 있습니다.
답변4
jq
사용할 수 없다고 가정하면 GNU awk
솔루션은 다음과 같습니다.
awk -F':|,|}' '{print $2"."$4"."$6}' file