【jq】用jq处理json数据,输出csv格式

2024-09-01  本文已影响0人  Bogon

file.txt 文本中的每条数据格式如下,如何 用shell命令输出每行中的 _id 、 groupName 、creator 和manager 字段?

{"_id":"AAAAAAAAAAA","groupUserNickNameChgDate":{"$numberLong":"0"},"historyMsg":0,"extGroup":false,"type":2,"headerId":"662e8762d08e3350658c0558","adminAudit":0,"forbidChangeName":0,"robotDate":{"$numberLong":"0"},"banned":0,"createDate":{"$date":"2018-07-06T02:20:44.759Z"},"micDisable":0,"creator":"BBBBBBBBBB","memberAtAll":1,"watermark":0,"mCallStatus":0,"manager":["CCCCCCCCCC"],"appUpdateTime":{"$numberLong":"0"},"addUserMark":0,"groupUserChangeDate":{"$date":"2024-04-28T17:29:06.043Z"},"groupName":"多人测试群","disable":false,"forbidCovertGroup":0,"mCallRecordStatus":0}
{
    "_id": "AAAAAAAAAAA",
    "groupUserNickNameChgDate": {
        "$numberLong": "0"
    },
    "historyMsg": 0,
    "extGroup": false,
    "type": 2,
    "headerId": "662e8762d08e3350658c0558",
    "adminAudit": 0,
    "forbidChangeName": 0,
    "robotDate": {
        "$numberLong": "0"
    },
    "banned": 0,
    "createDate": {
        "$date": "2018-07-06T02:20:44.759Z"
    },
    "micDisable": 0,
    "creator": "BBBBBBBBBB",
    "memberAtAll": 1,
    "watermark": 0,
    "mCallStatus": 0,
    "manager": ["CCCCCCCCCC"],
    "appUpdateTime": {
        "$numberLong": "0"
    },
    "addUserMark": 0,
    "groupUserChangeDate": {
        "$date": "2024-04-28T17:29:06.043Z"
    },
    "groupName": "多人测试群",
    "disable": false,
    "forbidCovertGroup": 0,
    "mCallRecordStatus": 0
}

你可以使用 jq 命令来提取这些字段。假设你的文件名是 file.txt,你可以用以下命令:

yum -y install  jq 
jq -r '._id, .groupName, .creator, .manager[]' file.txt

这将输出每行中的 _idgroupNamecreatormanager。如果你需要更复杂的格式或结构,可以调整 jq 的用法。

需要改造为以 csv 格式输出, title行为: _id, groupName, creator, manager

要将每行中的 _idgroupNamecreatormanager 提取出来,并以 CSV 格式输出,你可以使用 jq 工具来处理 JSON 数据,并结合 awk 或其他工具来格式化为 CSV。

假设你的文件名是 file.txt,可以使用以下命令:

jq -r '[._id, .groupName, .creator, (.manager | join(";"))] | @csv' file.txt

这个命令会:

  1. 使用 jq 读取 JSON 文件。
  2. 提取 _idgroupNamecreatormanager 字段。
    • (.manager | join(";"))manager 数组中的所有元素连接成一个用分号(;)分隔的字符串。如果 manager 不是数组,直接提取即可。
  3. 使用 @csv 将结果格式化为 CSV。

为了包含标题行,你可以先输出标题,然后再输出数据。可以用以下命令:

echo "_id,groupName,creator,manager"
jq -r '[._id, .groupName, .creator, (.manager | join(";"))] | @csv' file.txt

这样,第一行是标题行,后面的行是数据行。

上一篇 下一篇

猜你喜欢

热点阅读