在 linux shell 下可以使用 sort 命令对 IP 数据进行排序:
sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 testfile
排序后的效果如下:
alias sort_ip='sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4'
sort_ip testfile
152.195.38.76
157.148.59.238
157.148.62.140
172.18.103.24
180.163.252.201
183.240.188.218
183.240.188.219
220.194.116.20
223.167.82.188
sort 命令解释:
-n:按数值顺序排序,默认是按字母顺序。
-t .:指定.(点)作为字段分隔符。
-k 1,1 -k 2,2 -k 3,3 -k 4,4 按字段进行排序
-k 选项用于指定排序命令 sort 中的字段。每个字段可以指定起始和结束位置,格式为 -k start[,end],其中 start 是字段的起始位置,end 是字段的结束位置(可选)。
-k start[,end] 用来指定排序的字段范围。这里的 start 和 end 是字段的位置,表示从第 start 个字段开始到第 end 个字段结束进行排序。如果没有指定 end,则只使用 start 字段进行排序。
可以使用多个 -k 按多个字段进行排序。比如先按第1列排序,如果第1列相同,再按第2列排序,依次类推...
当不指定 end 位置时,默认只使用 start 字段进行排序,所以对 IP 排序可以简化为:
sort -n -t . -k 1 -k 2 -k 3 -k 4 testfile
当不指定 end 字段时,可以理解为 end 与 start 相同,命令:
sort -n -t . -k 1 -k 2 -k 3 -k 4 testfile
实际上等同于
sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 testfile
当 end 不为空时,-k start[,end] 一般用于将多个字段组合起来作为一个整体进行排序。
最后给一个实际应用的例子,在 linux 下,对 netstat -tn 的内容进行排序,按目标地址进行排序。
$ netstat -tn |
awk '{print $5" "$0}'|
sort -n -t. -k1 -k2 -k3 -k4 |
awk '{ for (i=2; i<=7; i++) printf "%st", $i; printf "n" }'
原始的 netstat -tp 目标地址是杂乱无章的:
我们使用 awk 将第5列(目标地址)提到行首,使用 sort 对其进行排序,排完序后再去掉辅助排序列,输出原始列:
netstat -tnp |
awk '{print $5 " "$0}'|
sort -n -t. -k1 -k2 -k3 -k4 |
awk '{ for (i=2; i<=7; i++) printf "%st", $i; printf "n" }'
排完序后的内容:
全文完。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...