关于IP地址排序
大家好!我有一个问题向大家请教。
有这样一个文本,包含了一些IP地址。
# cat a
192.168.12.49
192.168.12.5
192.168.12.50
192.168.140.49
192.168.140.5
192.168.140.50
我想对这些地址先对网段排序,即192.168.12网段在192.168.140网段前面,然后每个网段里的IP按自然数排序,即5,49,50的顺序。
排出来的顺序应该是
192.168.12.5
192.168.12.49
192.168.12.50
192.168.140.5
192.168.140.49
192.168.140.50
可是我试了很多排序命令都排不出来这样的顺序。
# cat a|sort -t "." -k4n
192.168.12.5
192.168.140.5
192.168.12.49
192.168.140.49
192.168.12.50
192.168.140.50
# cat a|sort -t "." -k3 -k4n
192.168.12.49
192.168.12.5
192.168.12.50
192.168.140.49
192.168.140.5
192.168.140.50
#
请问应该如何才能排出期望的顺序呢?应该不需要用awk吧?
本帖最后由 bikkuri 于 2023-03-12 07:54 编辑
# cat a|awk '{split($1,i,".");n=((i*256+i)*256+i)*256+i;a=$0}END{for(j=1;j<=asorti(a,b);j++)print a]}'
192.168.12.5
192.168.12.49
192.168.12.50
192.168.140.5
192.168.140.49
192.168.140.50
#
# cat a|awk '{split($1,i,".");n=((i*256+i)*256+i)*256+i;a=$0}END{slen=asorti(a,b);for(j=1;j<=slen;j++)print a]}'
192.168.12.5
192.168.12.49
192.168.12.50
192.168.140.5
192.168.140.49
192.168.140.50
# 直接上 sort
# cat a
192.168.12.49
192.168.12.5
192.168.12.50
192.168.140.49
192.168.140.5
192.168.140.50
# sort -t "." -k 1n,1 -k 2n,2 -k 3n,3 -k 4n,4 a
192.168.12.5
192.168.12.49
192.168.12.50
192.168.140.5
192.168.140.49
192.168.140.50 sort足矣,只是很多人忽略了用法:
sort -nt.-k3,3 -k4,4 a 非常感谢!学习了! 回复 1# bikkuri
sort -V a 哇!这是什么功能?一个-V直接就搞定了啊?
-V, --version-sort
natural sort of (version) numbers within text
回复 8# wh7211
回复 1# bikkuri
可是我试了很多排序命令都排不出来这样的顺序。
原因请参考:
http://bbs.chinaunix.net/thread-1773591-1-1.html#pid12746716
页:
[1]
2