버전 파일 추출에는 jq 및 awk가 사용됩니다.

버전 파일 추출에는 jq 및 awk가 사용됩니다.

다음 콘텐츠가 포함된 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

관련 정보