0

次のような .txt ファイルを作成する DCL スクリプトがあります。

something,somethingelse,00000004
somethingdifferent,somethingelse1,00000002
anotherline,line,00000015

ファイルを3列目で最も高いものから最も低いものに並べ替える必要があります例:

anotherline,line,00000015
something,somethingelse,00000004
somethingdifferent,somethingelse1,00000002

並べ替えコマンドを使用するのが最善ですか?私が見たすべてに位置番号が必要な場合、各行の開始位置が異なる場合、どのようにこれを行うことができますか?

ソートがこれを処理するのに悪い方法である場合、何か他のものがありますか、ファイルに行を書き込んでいるときに何とかこれを処理できますか。

VMS/DCL を使って数週間しか経っていないので、まだすべてのコマンドに慣れていません。

ありがとう!

4

2 に答える 2

1

VMSソートは実際にはこれに対応していません。あなたがしたように再フォーマットすることが唯一の方法です。

もしあなたがOpenVMSシステムでGNVソートにアクセスできないのなら、おそらくあなたは持っているか、PERLをインストールすることができますか?インストールはやや簡単です。

perlにはもちろん多くの方法があります。たとえば、匿名の並べ替え関数を使用します($ aは最初の引数、$ bは2番目、<>はすべての入力を読み取ります)

$ 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

于 2013-03-05T03:59:30.547 に答える
1

既にお気付きのように、VMS の並べ替えでは、レコード内の開始位置が固定されているフィールドが必要です。区切り文字でフィールドを指定することはできません。VMS ソートを使用する場合は、すべてのレコードについて、3 番目のフィールドが同じ列で始まることを確認する必要があります。つまり、前のフィールドを埋める必要があります。ファイルの作成方法を制御できる場合は、これでうまくいく可能性があります。ソート フィールドの前の文字列がどのくらいの大きさになるかがわからない場合、これは回避策ではない可能性があります。おそらく、フィールドの順序を変更することはオプションです。

一方、GNV がシステムにインストールされていることがあります。次に、GNU スタイルのソートであるそのソートを使用することができます。つまり$ mcr gnv$gnu:[bin]sort -t, -k3 -r x.txt、必要な結果が得られる可能性があります。

于 2013-03-04T21:22:16.953 に答える