unix 명령/셸 스크립트를 사용하여 avro 파일의 키-값 쌍 데이터를 행 및 열 형식으로 추출합니다.

unix 명령/셸 스크립트를 사용하여 avro 파일의 키-값 쌍 데이터를 행 및 열 형식으로 추출합니다.

다음 데이터 세트가 포함된 파일이 있습니다.

{"테이블":{"문자열":"ABC"} "TYPE":{"string":"U"} "TS":{"string":"2019-08-19 12:45:12.006362"} " C_TS":{"string":"2019-08-19 07:45:13.631000"} "dpt":{"string":"12345"} "ID":{"string":"123456789"} "FUC" :{"string":"ABC"} "QDSA":{"string":"0"} "SVCD":{"string":"S"} }

다음 형식으로 출력됩니다. 예상 출력:

테이블|유형|TS|C_TS|dpt|ID|FUC|QDSA|SVCD

ABC|U|2019-08-19 12:45:12.006362|2019-08-19 07:45:13.631000|12345|123456789|ABC|0|S|

답변1

다음 명령을 사용해보십시오. 훌륭하게 작동합니다.

주문하다

awk -F ":" '{print $3,$NF}' p.txt| sed 's/"\}*//g'| sed "s/,NAME/|/g"| sed -r "s/\s+//g"| sed '1i table|NAME'

산출

table|NAME
ABC|A

ABC|A

ABC|B

ABC|A

ABC|B

답변2

$ { echo 'table|NAME'; jq -r '"\(.table.string)|\(.NAME.string)"' file; }
table|NAME
ABC|A
ABC|A
ABC|B
ABC|A
ABC|B

jq이는 각 JSON 개체의 데이터를 구문 분석 하여 NAME개체에 있는 테이블 이름과 문자열이 포함된 각 출력 행에 대한 문자열을 생성하는 데 사용됩니다 .

헤더는 사용이 간단합니다 echo.

답변3

또 다른 jq 답변:

{ echo 'table|NAME'; <file jq -r 'map(.string)|join("|")'; }

함수를 활용하여 객체 와 문자열을 map결합 하고 두 객체 문자열을 연결합니다.tableNAMEjoin


마지막 OP의 질문 업데이트에 따라 다음 명령이 필요합니다(jq 버전 >= 1.5 필요).

<file jq -r 'keys_unsorted,map(.string)|join("|")'

관련 정보