2017-05-17 10 views
1

나는 하나의 JSON 객체로JQ는 하나의 JSON 객체로 두 개의 텍스트 문자열을 변환하는

텍스트 문자열이 두 개의 텍스트 문자열을 변환하려면 어떻게 :

start process: Mon May 15 03:14:09 UTC 2017 
logfilename: log_download_2017 

JSON 출력 :

{ 
"start process": "Mon May 15 03:14:09 UTC 2017", 
"logfilename": "log_download_2017", 
} 

쉘 스크립트 :

logfilename="log_download_2017" 
echo "start process: $(date -u)" | tee -a $logfilename.txt | jq -R . >> $logfilename.json 
echo "logfilename:" $logfilename | tee -a $logfilename.txt | jq -R . >> $logfilename.json 
+0

, 나는 이것이 당신이 정말로에서 원하는 것을 것을 짐작 : 단일 패스에서이 작업을 수행하려면, 당신은 -R -s

모두 함께 퍼팅, 당신은보다 더 할 수있는 JQ 사용합니다 * 질문에 * 명시 적으로 각 (키, 값) 쌍이 별도의 맵에 있어야한다고 다른 질문. –

답변

1

예를 들어 Use jq to turn x=y pairs into key/value pairs에서 key : value 문자열 변환의 기본 작업은 여러 가지 방법으로 수행 할 수 있습니다.

index(":") as $ix | {(.[:$ix]) : .[$ix+1:]} 

당신은 분명히 sub/2을 사용하여 수행 할 수있는 공간을 다듬을 : 예를 들어, 시작 할 수있다.

개체를 결합하려면 add을 사용할 수 있습니다. 솔직히

def trim: sub("^ +";"") | sub(" +$";""); 

def s2o: 
    (index(":") // empty) as $ix 
    | {(.[:$ix]): (.[$ix+1:]|trim)}; 

split("\n") | map(s2o) | add 
+0

다시 한번 고맙습니다. 우아한 코드와 간단한 설명입니다. 어제의 제안처럼, 모든 입력 명령을 exec로 파이핑하는 것과 같은 접근 방식을 통해 구현되었습니다. 나는 이것을 yesterdays 텍스트 처리 솔루션과 함께 배열에 결합하고 단일 json 객체를 만들어야합니다. 나는 시작과 끝에서 하나의 exec 처리 섹션을 다시 구현하려고 시도 할 것이다. 그것은 두 부분으로되어 있습니다. jq 프로그램과 각 jq 프로그램에 대한 exec 파이프 처리를 결합하십시오. 별도의 질문으로 질문하는 것이 현명합니까? – Gabe