Openvms DCL排序-不同的起始位置

Openvms DCL排序-不同的起始位置,openvms,dcl,Openvms,Dcl,我有一个DCL脚本,它创建了一个.txt文件,看起来像这样 something,somethingelse,00000004 somethingdifferent,somethingelse1,00000002 anotherline,line,00000015 我需要按第三列从高到低对文件进行排序 例: 如果我看到的所有东西都需要一个位置号,那么最好使用sort命令吗?如果每一行都有不同的起始位置,该如何做 如果排序是一种不好的处理方法,那么在将行写入文件时是否还有其他方法,或者我是否可以以

我有一个DCL脚本,它创建了一个.txt文件,看起来像这样

something,somethingelse,00000004
somethingdifferent,somethingelse1,00000002
anotherline,line,00000015
我需要按第三列从高到低对文件进行排序 例:

如果我看到的所有东西都需要一个位置号,那么最好使用sort命令吗?如果每一行都有不同的起始位置,该如何做

如果排序是一种不好的处理方法,那么在将行写入文件时是否还有其他方法,或者我是否可以以某种方式处理此问题

我现在只使用VMS/DCL几个星期了,所以我还不熟悉所有的命令


谢谢

正如您已经注意到的,VMS排序要求字段在记录中具有固定的起始位置。不能用分隔符指定字段。如果要使用VMS排序,必须确保所有记录的第三个字段都从同一列开始。换句话说,您必须填充前面的字段。如果您可以控制文件的创建方式,这可能对您有用。如果您不知道或不知道排序字段前面的字符串有多大,这可能不是一个解决方法。也许可以选择更改字段的顺序


另一方面,您可能会发现系统上安装了GNV。然后您可以尝试使用它的排序,这是一种GNU风格的排序。也就是说,
$mcr gnv$gnu:[bin]sort-t,-k3-r x.txt
可能会得到您想要的结果。

VMS sort实际上并没有为此配备。 像你那样重新格式化是唯一的办法

如果您没有在OpenVMS系统上访问GNV sort,那么您可能有,或者可以安装PERL?安装起来有点容易

在perl中,当然有很多方法。 例如,使用匿名排序函数($a是第一个参数,$b是第二个;读取所有输入)

$perl-e“打印排序{0+(拆分/,/,$b)[1]0+(拆分/,/,$a)[2]}”x.x
其中0+强制进行数值计算。对于(固定长度?)字符串比较,请使用:

$ perl -e "print sort { (split /,/,$b)[2] cmp (split /,/,$a)[2]} <>" x.x
$perl-e“打印排序{(split/,/,$b)[2]cmp(split/,/,$a)[2]}”x.x
嗯,,
Hein.
在这里输入代码

谢谢,我必须用f$fao(“!40AS!40AS!20AS”,input1,input2,input2)填充每个字段
$ perl -e "print sort { 0+(split /,/,$b)[1] <=>  0+(split /,/,$a)[2]} <>" x.x
$ perl -e "print sort { (split /,/,$b)[2] cmp (split /,/,$a)[2]} <>" x.x