首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linux排序“字段跳过”选项没有文档化,但似乎有效。

linux排序“字段跳过”选项没有文档化,但似乎有效。
EN

Unix & Linux用户
提问于 2021-05-04 15:26:27
回答 1查看 471关注 0票数 9

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

代码语言:javascript
运行
复制
grep  $LOG | sort -b +rn4 -5 +2 -3

在AIX上,这种排序语法已经记录在案,基本上,+a -b语法意味着跳过一个字段,并将a和b之间的字段作为您的排序键。

这在linux上不起作用,因为linux排序命令不喜欢在+a 'skip字段‘参数中包含'rn’(反向数字)标志。但这确实奏效了:

代码语言:javascript
运行
复制
grep 

因此,显然linux支持“字段跳过逻辑”,但手册页中没有记录(至少我可以看到)。-k选项可以在两个系统上指定一个键字段号。

代码语言:javascript
运行
复制
ls -l | sort -n +4

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

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

代码语言:javascript
运行
复制
ls -l | sort -n +4 -5

不过,确实有用。因此,很明显,+跳过键选择语法是可行的,但前提是您同时指定了起始列和结束列跳过参数。也没有记录在案。那么,我的问题--这个列跳过语法是不可取的吗?它是否只是因为代码就在命令中而没有人知道要删除它而起作用呢?

EN

回答 1

Unix & Linux用户

发布于 2021-05-04 15:36:36

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

在不符合POSIX1003.1-2001的系统上,[-pos2]’支持传统的零源语法+pos1D7来指定排序键。传统的命令‘sort +a.x -b.y’等价于‘sort -k a+1.x+1,b’’如果y是‘0’或不存在,否则就等于‘sort -k a+1.x+1,b+1.y’.’。这种传统的行为可以使用_POSIX2_VERSION环境变量(请参阅标准一致性)来控制;当POSIXLY_CORRECT未被设置时,也可以通过使用“-pos2”存在的传统语法来启用它。

如果在sort环境中运行_POSIX2_VERSION设置为199209的GNU x,则可以单独使用+D43

代码语言:javascript
运行
复制
ls -l | _POSIX2_VERSION=199209 sort -n +4
票数 8
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/648081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档