我正在将一个脚本从AIX移植到linux,该脚本具有以下形式的代码
grep $LOG | sort -b +rn4 -5 +2 -3在AIX上,这种排序语法已经记录在案,基本上,+a -b语法意味着跳过一个字段,并将a和b之间的字段作为您的排序键。
这在linux上不起作用,因为linux排序命令不喜欢在+a 'skip字段‘参数中包含'rn’(反向数字)标志。但这确实奏效了:
grep 因此,显然linux支持“字段跳过逻辑”,但手册页中没有记录(至少我可以看到)。-k选项可以在两个系统上指定一个键字段号。
ls -l | sort -n +4生成在第五个字段(大小)上排序的文件列表。但是在linux上,相同的命令会产生一个错误:
排序:无法读取:+4:没有这样的文件或目录
ls -l | sort -n +4 -5不过,确实有用。因此,很明显,+跳过键选择语法是可行的,但前提是您同时指定了起始列和结束列跳过参数。也没有记录在案。那么,我的问题--这个列跳过语法是不可取的吗?它是否只是因为代码就在命令中而没有人知道要删除它而起作用呢?
发布于 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 -ka+1.x+1,b’’如果y是‘0’或不存在,否则就等于‘sort -ka+1.x+1,b+1.y’.’。这种传统的行为可以使用_POSIX2_VERSION环境变量(请参阅标准一致性)来控制;当POSIXLY_CORRECT未被设置时,也可以通过使用“-pos2”存在的传统语法来启用它。
如果在sort环境中运行_POSIX2_VERSION设置为199209的GNU x,则可以单独使用+D43:
ls -l | _POSIX2_VERSION=199209 sort -n +4https://unix.stackexchange.com/questions/648081
复制相似问题