linux 排序“字段跳过”选项未记录,但似乎有效

linux 排序“字段跳过”选项未记录,但似乎有效

我正在将一个脚本从 AIX 移植到 Linux,该脚本具有以下形式的代码

grep <pattern> $LOG | sort -b +rn4 -5 +2 -3

在 AIX 上,这种排序语法已被记录下来,基本上 +a -b 语法意味着跳过 a 字段并将 a 和 b 之间的字段视为排序键。

这在Linux上不起作用,因为Linux排序命令不喜欢在+a“跳过字段”参数中包含“rn”(反向数字)标志。但这确实有效:

grep <pattern? $LOG | sort -b -rn +4 -5 +2 -3

显然“字段跳过逻辑”linux sort 支持,但没有在手册页中记录(无论如何我都可以看到)。 -k 选项适用于两个系统,用于指定关键字段编号。但这里有一个奇怪的现象。在 AIX 上

ls -l | sort -n +4

生成按第五个字段(大小)排序的文件列表。但在 Linux 上,相同的命令会产生错误:

排序:无法读取:+4:没有这样的文件或目录

ls -l | sort -n +4 -5

不过确实有效。因此,显然+skip-skip键选择语法是有效的,但前提是您同时指定了开始和结束列跳过参数。而且它没有记录在案。所以,我的问题 - 此列跳过语法是否已弃用?它是否只是因为代码就在命令中而没有人知道将其取出而起作用?

答案1

我假设你的 Linux 系统使用 GNU sort; GNUsort的手册页不提供完整的文档。相反,文档以信息文件的形式提供(info sort ) 的形式提供,并且也可以在 Coreutils 在线手册中找到。后者描述了您所看到的行为:

在不符合 POSIX 1003.1-2001 的系统上,sort支持传统的原点零语法“ ”来指定排序键。传统命令 ' ' 相当于 ' ' if+pos1 [-pos2]sort +a.x -b.ysort -k a+1.x+1,by为 ' 0' 或不存在,否则等价于 ' '。sort -k a+1.x+1,b+1.y

这种传统行为可以通过环境变量来控制_POSIX2_VERSION(参见标准符合性);当POSIXLY_CORRECT未设置时,也可以使用带有 ' 的传统语法来启用它-pos2' 展示。

如果您在其环境中设置sort为运行 GNU ,您将能够单独使用:_POSIX2_VERSION199209+x

ls -l | _POSIX2_VERSION=199209 sort -n +4

相关内容