컬 JSON 출력에서 ​​특정 값을 추출하는 방법

컬 JSON 출력에서 ​​특정 값을 추출하는 방법

어떤 이유로 이 명령을 사용하여 JSON 출력을 jq구문 분석 할 수 없습니다.curl

grep, awk, sed등과 같은 표준 Unix 도구를 사용하여 특정 필드를 추출해야 합니다.

출력 예 curl:

[
  {
    "case_id": 1500,
    "date": "13:58 02-02-2021",
    "user": "admin",
    "ip": "1.2.3.4",
    "type": "test",
    "active": "true"
  },
  {
    "case_id": 1501,
    "date": "14:45 02-02-2021",
    "user": "admin",
    "ip": "1.2.3.5",
    "type": "dev",
    "active": "false"
  }
]

ip필드 sum 의 값을 추출하려면 정규식이 필요합니다 type.


순수 IP 1.2.3.4를 추출해야 합니다.

같은 행에 쉼표로 구분된 값이 필요합니다. 예를 들어:

1.2.3.4, test  
1.2.3.5, dev

답변1

awk해결책.

$ awk -F\" '$2~/^(ip|type)$/{a=a$4","}END{print substr(a,0,length(a)-1)}' file.txt
1.2.3.4,test,1.2.3.5,dev
$

답변2

다른 것의 또 다른 변형

jq -r '.[]| "\(.ip), \(.type)"' < jsonfile

답변3

형식이 항상 예제에 표시된 대로 ip한 줄씩 표시된다면 type이 방법이 sed작동할 것입니다.

$ curl ... | sed -n '/ip\|type/{s/[^:]*: "\([^"]*\)"/\1/;N;s/\n[^:]*: "\([^"]*\).*/ \1/p};'
1.2.3.4, test
1.2.3.5, dev

다른 줄에 있지만 ip여전히 앞에 나타날 수 있는 경우 type이 대안도 작동합니다.

$ curl ... | sed -n '/ip/{s/[^:]*: "\([^"]*\)"/\1/;h;d};/type/{s/[^:]*: "\([^"]*\).*/\1/;x;G;s/\n/ /p}'
1.2.3.4, test
1.2.3.5, dev

답변4

paste -d ',' <(grep -wE 'ip' INPUT | awk -F'"' '{ print $4 }') <(grep -wE 'type' INPUT | awk -F'"' '{ print $4 }')

관련 정보