DDD tactical components

Terminal Shortcut tmux cut jq screen split

jq는 linux 기본 command가 아니지만 내가 정말 편하게 사용하는 command 중 하나다.
여러 서비스를 하면서 인스턴스마다 jq가 깔려있지 않은 서비스가 간혹있는데, 그럼 정말 굉장한 불편함을 느낀다.
jq는 그렇게 편하다.

설치

sudo apt install jq

사용성

jq는 이름 값을 한다.
json format의 data processing을 해주는 녀석이다.

log 등의 데이터에서 jq가 없다면 awkcut, sed 등으로 데이터 파싱을 해야하는데 굉장히 귀찮고 커맨드가 길어지기 쉽다.
jqjson data에 대해 lightweight, flexible한 command를 제공한다.
실제로 pipe를 같이 쓰면 이렇게 훌륭한게 없다.

단점은 기본 command도 아니고, json을 파싱해서 그런지, 대용량 파일을 파싱하면 아무래도 느려지기 쉽다.
그치만 이 느려진다는건 비교 대상이 cut 이런 녀석들이지 python으로 json parsing 하는 거보단 훨씬 빠르다.

사용법

jq는 사용법이 많다.
다 배우면 엄청 많고 복잡할 것 같은데, 자주 쓰는 것만 예시와 함께 정리한다.

예시

cat info

{“date”: “2021-08-11T15:12:18.195Z”, “site”: “meansoup.github.io”, “owner”: “meansoup”, “detail”: {“type”: “markdown”, “length”:623}}

jq .date info

“2021-08-11T15:12:18.195Z”

json data의 key를 이용해서 value를 쉽게 가져올 수 있다.

jq .detail.length info

623

depth가 있어도 쉽게 가져온다.

jq . info

{
  "date": "2021-08-11T15:12:18.195Z",
  "site": "meansoup.github.io",
  "owner": "meansoup",
  "detail": {
    "type": "markdown",
    "length": 623
  }
}

beautify 처럼 사용할 수도 있다.
한 라인으로 된 json을 라인을 분리해서 beautiful하게 꾸며준 것.

jq '{site: .site, detailType: .detail.type}' info

{
  "site": "meansoup.github.io",
  "detailType": "markdown"
}

이렇게 새로운 json 형식을 만들어 주거나 필요한 값만 꺼내올 수도 있다.

jq -c '{site: .site, detailType: .detail.type}' info

{"site": "meansoup.github.io", "detailType": "markdown"}

위와 동일한 command에서 -c 옵션을 주면 단일 라인으로 출력을 해준다.
실제 사용할 땐 이렇게 단일 라인으로 하는 경우가 많다.
(pipeline에 여러 json을 태우고 다시 한 줄로 뽑아내도록)


몇 가지 써본건 더 있지만 최근엔 익숙해진 이후에 이 정도만 사용하는 것 같다.
json이 표준처럼 사용되고 있는 요즘엔 jq는 기본 command 만큼이나 필수적인 것 같다.