Linux 命令行实用程序:sort(1) 可以按多个 (>2) 列对文本进行排序吗?

问题描述 投票:0回答:1

我有以下数据

foo-a12a11
foo-a12a2
foo-a12b12
foo-a12b21
foo-a13a10
foo-a13a1
foo-a13a9
IIII122344      # this indicates the order in which I want to consider the fields (I=ignore)

我想先按单个字母排序,然后按第一个数字排序,然后按字母排序,最后按数字顺序排序。

通过阅读手册页,我认为这就足够了

sort --key=1.1db,2.8n
。但这会返回
sort: options '-dn' are incompatible
...我觉得这很奇怪,因为我认为它们应该被视为矛键。 尝试切换第二个键以使用
d
进行排序是可行的,但会按字典顺序对尾随数字进行排序(即 10 位于 9 之前)

有人知道我如何实现我想要的排序(如下所示,手动生成)?:

foo-a12a2
foo-a12a11
foo-a12b12
foo-a12b21
foo-a13a1
foo-a13a9
foo-a13a10

foo-a
目前在所有情况下都是相同的,因此我选择忽略它以进行排序。

shell sorting unix gnu
1个回答
0
投票

对于如图所示的固定宽度部分(假设没有空白字符),您可以尝试:

sort -k 1.5db,1.5 -k 1.6n -k 1.7db,1.7 -k 1.9n
© www.soinside.com 2019 - 2024. All rights reserved.