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
这将输出每行中的 _id
、groupName
、creator
和 manager
。如果你需要更复杂的格式或结构,可以调整 jq
的用法。
需要改造为以 csv 格式输出, title行为: _id, groupName, creator, manager
要将每行中的 _id
、groupName
、creator
和 manager
提取出来,并以 CSV 格式输出,你可以使用 jq
工具来处理 JSON 数据,并结合 awk
或其他工具来格式化为 CSV。
假设你的文件名是 file.txt
,可以使用以下命令:
jq -r '[._id, .groupName, .creator, (.manager | join(";"))] | @csv' file.txt
这个命令会:
- 使用
jq
读取 JSON 文件。 - 提取
_id
、groupName
、creator
和manager
字段。-
(.manager | join(";"))
将manager
数组中的所有元素连接成一个用分号(;
)分隔的字符串。如果manager
不是数组,直接提取即可。
-
- 使用
@csv
将结果格式化为 CSV。
为了包含标题行,你可以先输出标题,然后再输出数据。可以用以下命令:
echo "_id,groupName,creator,manager"
jq -r '[._id, .groupName, .creator, (.manager | join(";"))] | @csv' file.txt
这样,第一行是标题行,后面的行是数据行。
网友评论