2016-09-26 2 views
1

을에 bash는 출력을 변환 내 출력을 쏟아 내면서 qoutation mark를 넣으십시오.나는 다음과 같은 명령을 실행하고 JSON

+0

여러분은'clustat' 결과를 보여줄 수 있습니까? 그렇기 때문에 사람들은 awk 스크립트의 대체 언어를 잠재적으로 다른 언어로 작성하고 테스트 할 수 있습니까? –

+0

(리터럴 따옴표를 추가하는 것은 쉽지만 올바른 JSON 따옴표의 다른 모든 측면을 처리합니다.'''를'\ "'로 변경하거나 리터럴 백 슬래시를 두 배로하는 등 다른 문제가 있습니다. 강력한 접근 방식은 기본 JSON 생성 지원 언어를 사용하는 것입니다. –

+0

FYI,'awk/primary/{...}'는'grep primary '의 효과를'awk' 스크립트에 포함시킵니다. –

답변

1

이 작업을 수행하지 마십시오. 가능한 모든 입력을 사용하여 유효한 JSON을 생성하도록 보장되는 @chepner's answer을 사용하십시오 (또는 JSON 표현이 가능하지 않으면 종료가 0이 아닌 상태로 실패 함).

아래는 질문에 표시된 특정 입력이 유효한 JSON을 생성하는 테스트, 아주 확실히 리터럴 백 슬래시로 끝나는 수많은 가능한 입력 (문자 따옴표 문자열 문자열 유효 JSON 아니라고 출력을 생성합니다 , 등).

sudo clustat | 
    awk '/primary/ { 
     print "{\"service\":\"" $1 "\",\"server\":\"" $2 "\",\"status\":\""$3"\"}" 
     }' 
+0

나는 당신이 나에게 준 것과 함께 다음과 같이 사용했다. 감사! sudo clustat | grep 기본 | 상태 "": \ ""$ 3 "\"}} "awk '{print"{\ "서비스 \": \ " ' –

+0

* 한숨 *. 드물지만 나는 대답을 받아 들일 실망합니다.(필자는 사실상 입양되기를 바라는 것이 아니라, 실습에 맞지만 제약이있는 올바른 입력 접근법을 제공하는 다른 잠재적 인 답변을 피하기 위해이 말을 썼다.) –

3

사용 jq는 :

sudo clustat | grep primary | 
    jq -R 'split(" ")|{service:.[0], server:.[1], status:.[2]}' 

입력은 원시 텍스트가 아닌 JSON으로 읽습니다. 각 행은 공백으로 분할됩니다 (실제 입력에 따라 split에 대한 인수를 조정해야 할 수도 있음). jq은 출력 개체를 구성 할 때 값이 올바르게 인용되도록합니다.

+0

필터에서'select (test ("primary"))'를 사용하여'grep'을'jq'로 옮길 수 있습니다. –

관련 문제