Phi*_*ppe 6 sorting bash awk json
我有一个文件中的JavaScript元组列表,每行一个,如下:
{ x : 12, y : -1.0, as : [ 2, 0, 0 ], str : "xxx", d : 0.041 },
{ x : 27, y : 11.4, as : [ 1, 1, 7 ], str : "yyy", d : 0.235 },
{ x : -4, y : 2.0, as : [ 7, 8, 3 ], str : "zzz", d : 0.002 },
{ x : 44, y : 5.4, as : [ 9, 4, 6 ], str : "kkk", d : 0.176 },
Run Code Online (Sandbox Code Playgroud)
我想根据给定字段的值(d我的示例中的字段)对它们进行排序,最好使用命令行工具(这是包含许多步骤的过程的一部分).
如果它有任何区别,我们可以假设所有行都具有完全相同的长度(我可以知道值的开始和结束索引d),尽管我更喜欢不依赖于此的解决方案.
Ash*_*man 15
自从提出这个问题并得到回答以来已经过了一段时间.
这些天,非hacky方式是使用像jq这样的东西:
cat data.json | jq 'sort_by(.d)' >> data_sorted.json
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看网站:
jq就像是用于JSON数据的sed - 你可以用它来切片和过滤,映射和转换结构化数据,同样方便sed,awk,grep和朋友让你玩文本.
如果由于某种原因你不喜欢jq,有很多选择
如果可以保证所有字段的大小相同,则可以使用排序命令。例如,这按列 x 值进行数字排序。
\n\ncat <your file.dat> | sort -n -k 5,7\nRun Code Online (Sandbox Code Playgroud)\n\n您此处作为示例的数据不是有效的 JSON,而是 javascript 语法。一种方法是包装文件,使其成为有效的 javascript 程序并在 node.js 命令行中运行它,
\n\nvar l = [\n { x : 12, y : -1.0, as : [ 2, 0, 0 ], str : "xxx", d : 0.041 },\n { x : 27, y : 11.4, as : [ 1, 1, 7 ], str : "yyy", d : 0.235 },\n ...\n]\nl.sort(function(o1, o2) {\xc2\xa0return o1.d < o2.d ? -1 : 1 });\nconsole.log(l);\nRun Code Online (Sandbox Code Playgroud)\n