我有一个像这样的 JSON,并希望根据行中的字符串提取其中的子集。
{
"out_name": {
"inner_name": {
"k1": [
"ABC:123|ABC:456",
"PQR:123|ABC:789",
"ABC:456|XYZ:456",
],
"k2": [
"ABC:86294742|ABC:214567200",
"XYZ:6379|ABC:14390"
]
}
}
}
结果应该只有 ABC 两次的行。数字将是可变的。如何在 grep 或类似的东西中实现这一点?
{
"out_name": {
"inner_name": {
"k1": [
"ABC:123|ABC:456"
],
"k2": [
"ABC:86294742|ABC:214567200"
]
}
}
}
我不知道
awk
或grep
是否内置了对json的支持,但是实现您想要做的事情的一种更简单的方法是使用开箱即用的支持json的东西,比如python。例如,如下所示的脚本将返回所需的结果:
cat example.json | python3 -c 'import fileinput
import json
import re
json_data = ""
for line in fileinput.input():
json_data = json_data + line
results = {"out_name": { "inner_name": {}}}
data = json.loads(json_data)
for key in data["out_name"]["inner_name"]:
for el in data["out_name"]["inner_name"][key]:
if re.search(".*ABC.*ABC.*", el):
if not(key in results["out_name"]["inner_name"]):
results["out_name"]["inner_name"][key] = []
results["out_name"]["inner_name"][key].append(el)
print(json.dumps(results, indent=2))'
其中
example.json
是您要分析的文件。请注意,此代码仅适用于给定的 json 结构,对于不同的用途,您必须正确切割它。