这POSIX 描述-b
该命令的标志sort
是
确定受限排序键的开始和结束位置时忽略前导字符。
我可以理解键的起始位置的用途,但是结束位置呢?有人可以举个例子吗?
例如,当区域设置设置为 POSIX 时,包含内容的文件
x z
x a
sort -k 2
会在和下以不同的方式排序sort -k 2b
,但我无法想出一个案例,比如说,sort -k 2,3b
和sort -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
.