我有一个DCL脚本,可以创建一个看起来像这样的.txt文件
something,somethingelse,00000004
somethingdifferent,somethingelse1,00000002
anotherline,line,00000015
我需要按第3列从最高到最低排序文件 例如:
anotherline,line,00000015
something,somethingelse,00000004
somethingdifferent,somethingelse1,00000002
最好使用sort命令,如果我所看到的一切都需要一个位置编号,如果每一行的起始位置不同,怎么办呢?
如果排序是一种不好的方法来处理这个还有别的东西,或者我可以以某种方式处理这个,同时将行写入文件。
我现在只使用VMS / DCL几周了,所以我还没有完全掌握所有命令。
谢谢!
答案 0 :(得分:1)
正如您已经注意到的那样,VMS排序需要在记录中具有固定起始位置的字段。您不能通过分隔符指定字段。如果要使用VMS排序,则必须确保第三个字段从同一列开始,用于所有记录。换句话说,您必须填充前面的字段。如果您可以控制文件的创建方式,这可能对您有用。如果您不这样做或者您不知道排序字段前面的字符串有多大,这可能不是一种解决方法。也许改变字段的顺序是一种选择。
另一方面,您可能会在系统上找到GNV。然后你可以尝试使用它的排序,这是一种GNU样式排序。也就是说,$ mcr gnv$gnu:[bin]sort -t, -k3 -r x.txt
可能会为您提供所需的结果。
答案 1 :(得分:1)
VMS Sort确实没有真正配备。 像你一样重新格式化是唯一的方法。
如果您无法访问OpenVMS系统上的GNV排序,那么您可能拥有或可以安装PERL?安装起来有点容易。
在perl中当然有很多方法。 例如,使用匿名排序函数($ a是第一个arg,$ b秒;<>读取所有输入)
$ perl -e "print sort { 0+(split /,/,$b)[1] <=> 0+(split /,/,$a)[2]} <>" x.x
其中0 +强制进行数值评估。对于(固定长度?)字符串比较使用:
$ perl -e "print sort { (split /,/,$b)[2] cmp (split /,/,$a)[2]} <>" x.x
HTH,
海因。enter code here