티스토리 뷰

programming/etc

jq command

Jacob_baek 2020. 9. 23. 13:13

jq command installation

stedolan.github.io/jq/download/

Examples1

우선 다음과 같은 json data가 있다고 가정하자.

jacob@jacob-laptop:~$ cat data.txt 
{
  "pools": [
    {
      "name": "volume1",
      "id": 1,
      "size_bytes": 100
    },
    {
      "name": "volume2",
      "id": 2,
      "size_bytes": 200
    },
    {
      "name": "volume3",
      "id": 3,
      "size_bytes": 300
    }
  ],
  "total": 600
}

pools내에 각 pool내 name, id를 pool에 맞춰서 출력해보도록 하자.

jacob@jacob-laptop:~$ cat data.txt | jq -r '.pools[] | .name, .id'
volume1
1
volume2
2
volume3
3

아래와 같이 string을 + operation을 사용하여 합칠수도 있다.

jacob@jacob-laptop:~$ cat data.txt | jq -r '.pools[] | (.name + "\t" + .id)'
volume1    1
volume2    2
volume3    3

다음과 같은 연산을 통한 결과를 출력할수도 있다.

jacob@jacob-laptop:~$ cat data.txt | jq -r '.pools[].size_bytes / .total'
0.16666666666666666
0.3333333333333333
0.5

연산을 하려는 iteration 외부에 있는 value를 참조하여 연산을 수행하기 위해서는 다음과 같이 변수화 시켜 진행할 수 있다.

jacob@jacob-laptop:~$ cat data.txt | jq -r '.total as $t | .pools[] | .name, .size_bytes / ($t)'
volume1
0.16666666666666666
volume2
0.3333333333333333
volume3
0.5

참고로 다음과 같이 두개의 다른 위치의 value를 가져와 출력시킬수도 있다.

[root@master001 net.d]# kubectl get po -n argocd -o json | jq -r '.items[] | .metadata.name, .status.podIP'
argocd-application-controller-0
10.233.120.133

Example2

다음과 같은 json을

[jenkins@slave ~]$ cat test.json 
[
  {
    "ID": "c314e8f3-fddb-447c-91f5-0080f8c5e05e",
    "Name": "testvm",
    "Status": "ACTIVE",
    "Networks": "private-net1=20.20.20.125; private-net2=30.30.30.33; private-net-ext=10.10.10.209; selfservice=192.168.1.111",
    "Image": "",
    "Flavor": "m1.small"
  },
  {
    "ID": "ff9b6758-2e73-4a2a-bc21-ab1058ea54de",
    "Name": "SlaveVM",
    "Status": "ACTIVE",
    "Networks": "selfservice=192.168.1.112, 172.16.100.100",
    "Image": "",
    "Flavor": "m1.medium"
  }
]

다음 명령을 통해 특정 column의 값만을 추출할수도 있다.

[jenkins@slave ~]$ cat test.json | jq --raw-output '.[] | select(.Name|test("testvm")) | .Name, .Networks'
testvm
private-net1=20.20.20.125; private-net2=30.30.30.33; private-net-ext=10.10.10.209; selfservice=192.168.1.154

'programming > etc' 카테고리의 다른 글

groovy script  (0) 2020.09.22
language level  (0) 2013.07.05
core dump analysis by gdb  (0) 2013.06.24
댓글
댓글쓰기 폼