Linux Commands
jq
는 linux 기본 command가 아니지만 내가 정말 편하게 사용하는 command 중 하나다.
여러 서비스를 하면서 인스턴스마다 jq
가 깔려있지 않은 서비스가 간혹있는데, 그럼 정말 굉장한 불편함을 느낀다.
jq
는 그렇게 편하다.
설치
sudo apt install jq
사용성
jq
는 이름 값을 한다.
json format의 data processing을 해주는 녀석이다.
log 등의 데이터에서 jq
가 없다면 awk
나 cut
, sed
등으로 데이터 파싱을 해야하는데 굉장히 귀찮고 커맨드가 길어지기 쉽다.
jq
는 json
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 만큼이나 필수적인 것 같다.