`sort +0 -1`做什么?

时间:2015-04-01 14:37:04

标签: shell sorting

我有一个旧脚本,其中包含sort +0 -1的变体,但我系统中的man sort甚至没有提及这些选项的存在。

another question开始,我被引导到the Wikipedia page for sort ,其中说:

  

在旧版本的排序中,+1选项使用第二列数据(+2用于第三列,等等)对程序进行排序。这是不推荐使用的,而-k选项可用于执行相同的操作。

但它没有提到像-1这样的负面论据应该做什么。

请注意,在我的"现代" sort(GNU coreutils 8.21),sort +0 -1有效,而以下所有内容都失败:
sort +0 +1sort -0 -1sort -0 +1

我甚至可以添加数字对(例如sort +0 -1 +2sort +0 -1 +2 -3),但是从一个简短的测试用例中我无法准确地推断它们的含义。

修改:为了完整性,当前无效的命令(例如sort +0 +1)等同于sort -k1 -k2

2 个答案:

答案 0 :(得分:4)

根据info上的gnu sort页面:

  

在旧系统上,'sort'支持过时的origin-zero语法   '+ POS1 [-POS2]'用于指定排序键。过时的序列'排序   + A.X -B.Y'相当于'sort -k A + 1.X + 1,B'如果Y为'0'或不存在,   否则它相当于'sort -k A + 1.X + 1,B + 1.Y'。

因此,sort +0 -1相当于较新系统中的sort -k 1,1

答案 1 :(得分:1)

补充Marc B的答案:

This GNU coreutils page解释了如何通过定义此环境变量来模拟sort的旧行为:

_POSIX2_VERSION=199209

使用此变量,sort +0 +1等命令的行为与旧系统相同,无需修改脚本(并可能引入错误)。