`sort -k 2,3b` 和 `sort -k 2,3` 何时不同?

`sort -k 2,3b` 和 `sort -k 2,3` 何时不同?

POSIX 描述-b该命令的标志sort

确定受限排序键的开始和结束位置时忽略前导字符。

我可以理解键的起始位置的用途,但是结束位置呢?有人可以举个例子吗?

例如,当区域设置设置为 POSIX 时,包含内容的文件

x  z
x a

sort -k 2会在和下以不同的方式排序sort -k 2b,但我无法想出一个案例,比如说,sort -k 2,3bsort -k 2,3会产生影响。

答案1

当您将反向添加到比较中时,它会产生效果。优先顺序发生变化,因为-r仅适用于最后手段比较

无反转:

$ sort -k 1,2 sample
A  34
A 33

$ sort -k 1,2b sample
A  34
A 33

撤销:

$ sort -rk 1,2 sample
A 33
A  34

$ sort -rk 1,2b sample
A  34
A 33

答案2

如果其他人对此感到好奇......并且碰巧发现了这个问题,Sukminder--debug在 GNU 排序中提到的标志帮助我找到了解决这个问题的答案。假设,作为一个公认的人为示例,您想要对这个格式不规范的文件进行排序:

x   FRA-Paris    Pierre
x ESP-Barcelona   Jordi
x     FRA-Nice  Charles
x    FRA-Toulouse Nicole
x   ESP-Seville  Javier
x    ESP-Madrid  Carlos

进入这个:

x    ESP-Madrid  Carlos
x   ESP-Seville  Javier
x ESP-Barcelona   Jordi
x     FRA-Nice  Charles
x    FRA-Toulouse Nicole
x   FRA-Paris    Pierre

也就是说,只关注第二个字段中的国家,然后关注第三个字段中的人名。我们要考虑第二个字段的前三个字符,并且在确定第一个字符和第三个字符时忽略前导空格很重要。

该命令sort -k 2b,2.3b -k 3b会起作用,但sort -k 2b,2.3 -k 3b不会。必须指出的是,在这种情况下,最自然的方法是应用全局-b选项,就像sort -bk 2,2.3 -k 3.

相关内容