假设我有一个如下所示的 JSON:
{
"key1": {
"keyA": "1",
"keyB": "null",
"keyC": "null"
},
"key2": {
"keyA": "null",
"keyB": "3",
"keyC": "null"
}
}
Run Code Online (Sandbox Code Playgroud)
我想找到一种方法来排除所有具有null
JSON值的键。所以结果如下:
{
"key1": {
"keyA": "1"
},
"key2": {
"keyB": "3"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用它们的名字排除特定的键jq
,例如cat myjson.json | jq 'del(.[]|.keyA)'
,这将删除我keyA
在 json 中的所有键,但我想根据它们的值排除这些键......如何"null"
使用排除所有具有值的键jq
?
假设我有以下 JSON 文件:
[
{
"name1": "fruits",
"name2": "cars",
"name3": "houses"
}
]
Run Code Online (Sandbox Code Playgroud)
我知道我可以用于jq
重命名其值,如下所示:
jq '[.[] | .["newname1"] = .name1 | del(.name1)]' file
Run Code Online (Sandbox Code Playgroud)
这工作正常,它允许我甚至在更复杂的 JSON 结构上进行更改...但是,这是我想要更改的键的非常明确的声明。执行相同操作的另一种方法是使用以下命令:
jq 'map(with_entries(if .key == "name1" then .key = "newname1" else . end))' file
Run Code Online (Sandbox Code Playgroud)
这是一种检查 JSON(对象数组)内具有特定名称的所有键并更改它们的方法。在这种情况下,我不需要显式声明 的名称key
。但是,这仅适用于对象数组。我想找到一种以递归方式更改 json 内所有键的方法。假设我有一个如下所示的 JSON:
{
"name1": "one",
"type": "FeatureCollection",
"features": [
{
"name1": "one",
"valueA": "0",
"valueB": "0",
"keyB": "2",
"keyC": "3"
},
{
"name1": "two",
"valueA": "11",
"valueB": "21",
"keyB": "15",
"keyC": "20"
} …
Run Code Online (Sandbox Code Playgroud) 假设我有file.csv
以下内容:
id;filename;device
1;118574934-20220503-17h44m20s101;
2;118574934-20220503-17h44m20s101;
3;118574934-20220503-17h44m20s101;DEVICE-0001-33
4;118574934-20220503-17h44m20s101;DEVICE-0001-33
5;118574934-20220503-17h44m20s101;DEVICE-0001-33
6;118574934-20220503-17h44m20s101;DEVICE-0001-33
7;118574934-20220503-17h44m20s101;DEVICE-0001-33
Run Code Online (Sandbox Code Playgroud)
我创建了一个awk
脚本,用于在设备名称出现在我的文件中时处理获取设备名称,然后完成执行。它script.awk
的功能如下:
id;filename;device
1;118574934-20220503-17h44m20s101;
2;118574934-20220503-17h44m20s101;
3;118574934-20220503-17h44m20s101;DEVICE-0001-33
4;118574934-20220503-17h44m20s101;DEVICE-0001-33
5;118574934-20220503-17h44m20s101;DEVICE-0001-33
6;118574934-20220503-17h44m20s101;DEVICE-0001-33
7;118574934-20220503-17h44m20s101;DEVICE-0001-33
Run Code Online (Sandbox Code Playgroud)
其执行后的输出awk -f script.awk file.csv
为:
filename;folder
DEVICE-0001-33_118574934-20220503-17h44m20s101.txt;DEVICE-0001-33
Run Code Online (Sandbox Code Playgroud)
问题是我想将字符串拆分DEVICE-0001-33
为DEVICE-0001
. 因为我已经使用了FS
with;
并且我不能FS
再次使用 as-
来分割我的device
变量。我怎样才能仅使用来处理这个问题awk
?FS
一旦已经使用,如何将变量与特定字符分开?