我想对数据列表进行排序,并打算根据其第一列(即 IP 地址)对其进行排序。
192.168.1.100
192.168.1.101
192.168.1.110
192.168.1.119
192.168.1.20
192.168.1.30
192.168.1.33
192.168.1.54
192.168.1.64
192.168.1.6
192.168.1.91
在我的第一台机器上,我进行了测试sort -n
,它按预期工作
# coreutils, version: 8.31, release: 23
192.168.1.6
192.168.1.20
192.168.1.30
192.168.1.33
192.168.1.54
192.168.1.64
192.168.1.91
192.168.1.100
192.168.1.101
192.168.1.110
192.168.1.119
但是在我的第二台机器上,它不能正确排序
# coreutils, version:8.4
192.168.1.100
192.168.1.101
192.168.1.110
192.168.1.119
192.168.1.20
192.168.1.30
192.168.1.33
192.168.1.54
192.168.1.6
192.168.1.64
192.168.1.91
两台机器具有相同的语言环境en_US.UTF-8
为什么会这样?我该如何解决?
如果没有适当的键位,
sort
则使用整行作为键。由于在所有行中,前三个八位字节保持不变,因此整个排序基于最后一个八位字节中第一个字符的数字位置。由于1
出现在2
带有 的八位字节之前100
,因此101
出现在其他八位字节之前。定义正确的关键位置并使用数字排序。例如,在您的情况下,将输入的分隔符设置为,
.
并让其sort
仅在第 4 个字段上发挥作用。4,4
方法从由 分隔的第 4 个字段开始并.
在相同的第 4 个字段停止。您还可以覆盖
locale
系统中定义的任何其他设置,并直接使用系统的默认设置和LC_ALL=C
本地命令。请参阅做什么LC_ALL=C
?了解为什么感谢Kamil Maciorowski 的评论突出了实际问题。