我有以下数据
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
目前在所有情况下都是相同的,因此我选择忽略它以进行排序。
对于如图所示的固定宽度部分(假设没有空白字符),您可以尝试:
sort -k 1.5db,1.5 -k 1.6n -k 1.7db,1.7 -k 1.9n