【发布时间】:2021-08-05 12:12:31
【问题描述】:
在bash 中使用sort 和-n 选项不会给我预期的结果。
$ cat numbers | sort -n
1.0
1.1
1.11.4
1.15
1.3
1.3.3
1.4-p1
1.6.1
2.2.10
2.2.2
2.4
2.4.6
我尝试使用-k1、-k1.1n 等(-k1.3n 仅对以1 开头的数字的顺序正确)。看来我在这里缺少一些非常基本的东西......
【问题讨论】:
在bash 中使用sort 和-n 选项不会给我预期的结果。
$ cat numbers | sort -n
1.0
1.1
1.11.4
1.15
1.3
1.3.3
1.4-p1
1.6.1
2.2.10
2.2.2
2.4
2.4.6
我尝试使用-k1、-k1.1n 等(-k1.3n 仅对以1 开头的数字的顺序正确)。看来我在这里缺少一些非常基本的东西......
【问题讨论】:
此-V 有一个特殊标志,用于表示版本号
$ sort -V numbers
1.0
1.1
1.3
1.3.3
1.4-p1
1.6.1
1.11.4
1.15
2.2.2
2.2.10
2.4
2.4.6
ps。此选项在 GNU Coreutils 中可用,但在其他实现中可能会丢失。
【讨论】:
sort 实际上是 GNU sort,但它已经很老了,并且早于对@ 的支持987654325@;从 OS X 10.11 开始,版本号为 sort (GNU coreutils) 5.93。
-V 添加到macOS sort --version 2.3-Apple (99)。
你需要 -t。标志以指定“。”作为您的分隔符,并且多个关键位置说明符处理逐渐更长/更深的数字。我仍然不太明白它是如何工作的,但它确实有效......
sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n numbers
或
cat numbers | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n
【讨论】:
sort -g numbers
会的。根据排序手册页,-g 用于数字排序:
-g, --general-numeric-sort
按一般数值比较
【讨论】:
试试;
排序 -g -k1 文件
一定会成功!!!
【讨论】: