如何对此输出进行排序?
10.1.3.39:{ "range_start" : 96, "range_end" : 96 }
10.1.3.27:{ "range_start" : 33, "range_end" : 33 }
10.1.3.100:{ range_start" : 30, "range_end" : 30 }
10.1.2.233:{ "range_start" : 78, "range_end" : 78 }
10.1.4.239:{ "range_start" : 53, "range_end" : 53 }
10.1.2.161:{ "range_start" : 44, "range_end" : 44 }
我想按range_start
键
所以,预期会是:
10.1.3.100:{ "range_start" : 30, "range_end" : 30 }
10.1.3.27:{ "range_start" : 33, "range_end" : 33 }
10.1.2.161:{ "range_start" : 44, "range_end" : 44 }
10.1.4.239:{ "range_start" : 53, "range_end" : 53 }
10.1.2.233:{ "range_start" : 78, "range_end" : 78 }
10.1.3.39:{ "range_start" : 96, "range_end" : 96 }
答案 0 :(得分:2)
你可以这样做decorate, sort, undecorate管道:
$ awk -F",|:" '{printf "%s\t%s\n", $3,$0}' file | sort -n | awk -F"\t" '{print $2}'
或者,如果使用\t
或其他唯一分隔符,则可以使用cut
:
$ awk -F",|:" '{printf "%s\t%s\n", $3,$0}' file | sort -n | cut -f 2
两种情况:
10.1.3.100:{ range_start" : 30, "range_end" : 30 }
10.1.3.27:{ "range_start" : 33, "range_end" : 33 }
10.1.2.161:{ "range_start" : 44, "range_end" : 44 }
10.1.4.239:{ "range_start" : 53, "range_end" : 53 }
10.1.2.233:{ "range_start" : 78, "range_end" : 78 }
10.1.3.39:{ "range_start" : 96, "range_end" : 96 }
如果文本数据中有选项卡,请将\t
更改为另一个分隔符。
答案 1 :(得分:1)
这里我们有一个类似JSON的格式,而不是列格式的文本,但我们可以通过仅用空格分隔的字段值进行排序:
sort -n -k 4,4
会产生所需的输出。
但是,在许多情况下,使用知道格式的解析器会有所帮助。
例如,如果键和值不一致地用空格分隔,则sort
的解决方案将失败,例如。
0.1.3.100:{ range_start":30, "range_end" : 30 }
或者如果条目的顺序不一致,例如
0.1.2.233:{ "range_end" : 108, "range_start" : 78 }
10.1.3.39:{ "range_start" : 96, "range_end" : 96 }