본문 바로가기

OS/Linux

jq filter를 이용한 json 출력하기

반응형

 

아래와 같은 결과값을 var1, var2 를 key 값으로 하는 json을 표출 하려한다.

 

test1 jq filter:       var1 100,     var2 200. this is test1
test2 jq filter:       var1 300, var2 400.    this is test2

 

최종 json 표출은 아래와 같다.

[
  {
    "var1": "100",
    "var2": "200.",
    "other": "this is test1"
  },
  {
    "var1": "300",
    "var2": "400.",
    "other": "this is test2"
  }
]

 

 

 

 

1. 특수기호 제거

",", ":", "." 같은 특수 기호를 제거한다.

편의상 a라는 파일에 넣고 작업한다.

cat a | sed 's/://g' | sed 's/,//g' | sed 's/\.//g'

 

결과

test1 jq filter       var1 100     var2 200 this is test1
test2 jq filter       var1 300 var2 400    this is test2

 

 

 

2. 다중공백 제거

다중공백을 하나의 공백으로 치환한다.

 

sed  -e "s/\ \+/ /g"

cat a | sed 's/://g' | sed 's/,//g' | sed 's/\.//g' | sed  -e "s/\ \+/ /g"

 

결과

test1 jq filter var1 100 var2 200 this is test1
test2 jq filter var1 300 var2 400 this is test2

 

 

 

3. split으로 줄바꿈으로 구분

 

jq -R -s 'split("\n")[:-1]'

cat a | sed 's/://g' | sed 's/,//g' | sed 's/\.//g' | sed  -e "s/\ \+/ /g" | jq -R -s 'split("\n")[:-1]'

 

결과

[
  "test1 jq filter var1 100 var2 200 this is test1",
  "test2 jq filter var1 300 var2 400 this is test2"
]

 

 

 

4. split으로 공백으로 구분

 

jq -R -s 'split("\n")[:-1] | map(split(" "))'

cat a | sed 's/://g' | sed 's/,//g' | sed 's/\.//g' | sed  -e "s/\ \+/ /g" | jq -R -s 'split("\n")[:-1] | map(split(" "))'

 

 

결과

[
  [
    "test1",
    "jq",
    "filter",
    "var1",
    "100",
    "var2",
    "200",
    "this",
    "is",
    "test1"
  ],
  [
    "test2",
    "jq",
    "filter",
    "var1",
    "300",
    "var2",
    "400",
    "this",
    "is",
    "test2"
  ]
]

 

 

 

5. var1, var2를 key로 value 설정

 

jq -R -s '[split("\n")[:-1] | map(split(" ")) | .[] | { "var1": .[4], "var2": .[6], "other": .[7:] | join(" ") }]'

cat a | sed 's/://g' | sed 's/,//g' | sed  -e "s/\ \+/ /g" | jq -R -s '[split("\n")[:-1] | map(split(" ")) | .[] | { "var1": .[4], "var2": .[6], "other": .[7:] | join(" ") }]'

 

결과

[
  {
    "var1": "100",
    "var2": "200.",
    "other": "this is test1"
  },
  {
    "var1": "300",
    "var2": "400.",
    "other": "this is test2"
  }
]

 

반응형