文本处理以获取属性

时间:2018-10-31 04:41:50

标签: awk sed

在输入数据下方查找:

[{"acc_id": 166211981, "archived": true, "access_key": "ALLLJNXXXXXXXPU4C7GA", "secret_key": "X12J6SixMaFHoXXXXZW707XXX24OXXX", "created": "2018-10-03T05:56:01.208069Z", "description": "Data Testing", "id": 11722990697, "key_field": "Ae_Appl_Number", "last_modified": "2018-10-03T08:44:20.324237Z", "list_type": "js_variables", "name": "TEST_AE_LI_KEYS_003", "project_id": 1045199007354, "s3_path": "opti-port/dcp/ue.1045199007354/11722990697"}, {"acc_id": 166211981, "archived": false, "access_key": "ALLLJNXXXXXXXPU4C7GA", "secret_key": "X12J6SixMaFHoXXXXZW707XXX24OXXX", "created": "2018-10-03T08:46:32.535653Z", "description": "Data Testing", "id": 11724290732, "key_field": "Ae_Appl_Number", "last_modified": "2018-10-03T10:11:13.167798Z", "list_type": "js_variables", "name": "TEST_AE_LI_KEYS_001", "project_id": 1045199007354, "s3_path": "opti-port/dcp/ue.1045199007354/11724290732"}]

我希望输出文件包含以下数据:

11722990697,TEST_AE_LI_KEYS_003,opti-port/dcp/ue.1045199007354/11722990697
11724290732,EST_AE_LI_KEYS_001,opti-port/dcp/ue.1045199007354/11724290732

我能够一次记录一个记录并使用awk处理它,但是我也得到了字段名。

在我的审判下找到

R=cat in.txt | awk -F '},' '{print $1}'

echo $R | awk -F , '{print $7 " " $11 " " $13}'

我希望整个文件都没有字段名。

2 个答案:

答案 0 :(得分:2)

AWK / SED不是解析JSON文件的正确工具。使用jq

[root@localhost]# cat parse_json.py
#!/usr/bin/env python

# Import the json module 
import json

# Open the json file in read only mode and load the json data. It will load the data in python dictionary
with open('abc.json') as fh:
        data = json.load(fh)

# To print the dictionary
# print(data)

# To print the name key from first and second record
# print(data[0]["name"])
# print(data[1]["name"]) 
# Now to get both the records use a for loop
for i in range(0,2):
        print("%s,%s,%s") % (data[i]["access_key"],data[i]["name"],data[i]["s3_path"])
[root@localhost]# ./parse_json.py
ALLLJNXXXXXXXPU4C7GA,TEST_AE_LI_KEYS_003,opti-port/dcp/ue.1045199007354/11722990697
ALLLJNXXXXXXXPU4C7GA,TEST_AE_LI_KEYS_001,opti-port/dcp/ue.1045199007354/11724290732

如果您不想安装任何其他软件,那么也可以使用大多数Linux机器上都可以找到的python

{{1}}

答案 1 :(得分:0)

假设输入数据在名为input.json的文件中,则可以使用Python脚本来获取属性。将以下内容放入名为fetch_attributes.py的文件中:

import json

with open("input.json") as fh:
    data = json.load(fh)
with open("output.json", "w") as of:
    for record in data:
        of.write("%s,%s,%s\n" % (record["id"],record["name"],record["s3_path"]))

然后,以以下方式运行脚本:

python fetch_attributes.py

代码说明

  • import json-导入Python的json库以解析JSON。
  • with open("input.json") as fh:-打开输入文件并在if中获取文件处理程序。
  • data = json.load(fh)-使用load()库中的json方法加载JSON输入文件,该库将使用Python字典填充data变量。
  • with open("output.json", "w") as of:-以写模式打开输出文件,并在of中获取文件处理程序。
  • for record in data:-遍历JSON中的记录列表。
  • of.write("%s,%s,%s\n" % (record["id"],record["name"],record["s3_path"]))-从每条记录中获取所需的属性并将其写入文件中。