如何使用jq将对象数组按IPv4地址值作为32位整数进行排序,而不是按字母数字排序?
下面是我所指的一些额外格式的插图,以确保视觉清晰度:
$ echo '
{"name": "dns", "ip": "4.4.4.4"}
{"name": "host1", "ip": "10.9.9.9"}
{"name": "host2", "ip": "10.10.10.10"}
' |jq -sr '.|=sort_by(.ip) |.[] |[.name, .ip] |@tsv'
host2 10.10.10.10
host1 10.9.9.9
dns 4.4.4.4
这|=sort_by(.ip)
个按字母数字顺序排序,但我希望数组按"IPnumber"排序.如果我有这样的TSV格式,我可以使用外部工具(例如sort
的这个非POSIX-V
扩展)在外部完成这项工作,但是有没有办法在jq
内完成这项工作?
$ echo '
{"name": "dns", "ip": "4.4.4.4"}
{"name": "host1", "ip": "10.9.9.9"}
{"name": "host2", "ip": "10.10.10.10"}
' |jq -sr '.|=sort_by(.ip) |.[] |[.name, .ip] |@tsv' |sort -t$'\t' -Vk2
dns 4.4.4.4
host1 10.9.9.9
host2 10.10.10.10