사용자의 필드가 내부 필드인 경우 해당 필드를 표시해야 합니다.
입력하다:
[
{
"name": "A_A",
"uri": "https:test/test",
"realm": "internal"
},
{
"name": "B_B",
"uri": "https:test/test",
"realm": "internal"
},
{
"name": "C_C",
"uri": "https:test/test",
"realm": "external"
}
]
시험을 마친:
jq 'if .[].realm == "internal" then .[].name else empty end'
하지만 문제는 모든 사용자를 나열한다는 것입니다.
예상 출력:
A_A , B_B
답변1
jq 함수를 사용할 수 있습니다 select
.
<file jq -r '.[] | select(.realm == "internal") | .name'
첫 번째는 .[]
배열 요소를 가져옵니다. select()
올바른 요소가 포함된 개별 요소 및 필터에 적용됩니다 realm
. 마지막 부분은 name
필드를 인쇄합니다.
답변2
조건을 걸어야지뒤쪽에테스트할 단일 프로젝트를 반복합니다.
jq '.[]| (if .realm == "internal" then .name else empty end)'
답변3
@csv
사용자가 CSV 형식의 출력을 원하는 것 같으므로 jq
.
이 명령은 입력 배열의 각 요소에 명령문을 map()
적용하는 데에도 사용됩니다 .select()
$ jq -r 'map(select(.realm == "internal").name)|@csv' file
"A_A","B_B"
이는 키 값을 기반으로 관련 배열 항목을 선택한 다음 여기에서 키 값을 추출하여 realm
문제를 해결했음을 보여줍니다. 그러면 단일 CSV 레코드로 형식이 지정되고 출력되는 값 name
배열이 남게 됩니다 .name
@csv