jq 출력을 쉼표로 구분된 문자열과 새 줄로 결합합니다.

jq 출력을 쉼표로 구분된 문자열과 새 줄로 결합합니다.

이 JSON 파일에서 특정 열을 추출하려고 합니다(파일 형식이 올바르지 않을 수 있음).

다음은 데이터 샘플입니다.

{ "_id" : { "$oid" : "4ddb1e4a9a0881572c000008" }, "aggregates" : { "_id" : { "$oid" : "4e0cc19ccd62f55ff9000006" }, "comments" : 0, "followers" : 1610, "following" : 92, "likes" : 8, "mig" : 1, "ntf" : 294, "posts" : 1, "yaf" : 1 }, "created_at" : { "$date" : 1306205770619 }, "devices" : [ "ios2:b54e0199cbcf73ba602bd11365b8bd3a7024796b", "ios2:7511337bea3c2378533fedceb156fae0a4a12bfe" ], "email" : "[email protected]", "email_verified" : true, "fb_info" : { "ext_user_id" : "123", "ext_access_token" : "tok_id", "ext_token_expr" : { "$date" : 1448577425000 }, "ext_username" : null, "fetched_at" : { "$date" : 1306205770610 }, "ext_permissions" : { "email" : 1, "offline_access" : 1, "contact_email" : 1, "user_friends" : 1, "publish_actions" : 1, "public_profile" : 1 }, "_id" : { "$oid" : "null" }, "ext_token_secret" : null }, "fb_user_id" : "123", "first_name" : "null", "gender" : "male", "last_name" : "null", "last_viewed_notification" : { "$oid" : "51525c4b4b807539ab002de4" }, "lns" : 1258, "profile" : { "city" : "San Francisco", "state" : "California", "_id" : { "$oid" : "4e6a9536cd62f5543b00000b" } }, "pv2" : { "desc" : "San Francisco, California" }, "reg_method" : "fb", "seg" : { "sup" : "I" }, "status" : "active", "username" : "null" }

{로 시작하고 }로 끝나는 동일한 형식의 [] 3개 행이 없는 열이 여러 개 있습니다.

jq그래서 이 예에서는 각 필드 데이터 사이에 쉼표를 추가하는 것을 사용했습니다 . 내 명령은 다음과 같습니다

cat example.json example.json example.json |
  jq -r '.status,.city,.gender' | paste -sd,

(샘플 데이터는 실제 데이터를 사용하여 얻을 수 있는 결과를 재현하기 위해 세 번 인쇄되었습니다.)

출력은 다음과 같습니다

active,null,male,active,null,male,active,null,male

데이터를 추출할 때마다 새 행이 있어야 하는데, 매번 이 작업을 수행하는 방법을 지금은 모르겠습니다. 나는 그것들을 추출하려고 노력하고 모든 데이터를 한 행에 얻습니다. 올바른 출력은 각 데이터에 대한 새 행이어야 합니다.

active,null,male
active,null,male
active,null,male

답변1

당신은 그것을 사용할 수 있습니다문자열 보간기능 자리 표시자 에 선택한 값이 포함될 수 있고 나머지는 큰따옴표로 묶인 주변 텍스트인 jq문자열을 출력할 수 있습니다 . \()귀하의 예를 들어:

jq -r '"\(.status),\(.city),\(.gender)"' example.json{,,}
active,null,male
active,null,male
active,null,male

답변2

$ cat file file file | mlr --j2c -N unsparsify --fill-with null -f status,city,gender then cut -o -f status,city,gender
active,null,male
active,null,male
active,null,male

Miller( mlr)는 여기서 질문의 JSON을 세 번 연속 읽는 데 사용됩니다. 매번 먼저 작업을 사용하여 필드 status, city또는 문자열 gender의 null 또는 누락된 값을 채웁니다. 그런 다음 동일한 필드를 추출하는 데 사용됩니다. 출력은 헤더 없는 CSV 파일이며 인용이 필요한 모든 필드는 인용됩니다.nullunsparsifycut

관련 정보