3

テキストファイルを列で並べ替える可能性はあるのでしょうか。例えば

私はaux1.txtこのような行を持っています

Name SecondName Grade

シェルで私はこれを行うことができます

sort -r -k 3 aux1  

3列目(グレード)でファイルを並べ替えます。

バッチで

sort /+3 < aux1.txt

3番目の文字の後にファイルを並べ替えます。

バッチのソートマニュアルを読みましたが、結果がありません。

4

4 に答える 4

6

バッチ ファイルを使用して 、独自のソート ラッパーを作成できます。

列を一時ファイルに
並べ替え、並べ替えて元に戻すだけです。(ほぼ明らか)

REM *** Get the desired colum and place it as first column in the temporary file
setlocal DisableDelayedExpansion
(
    for /F "tokens=1-3 delims= " %%A in (aux1.txt) DO (
        set "par1=%%A"
        set "par2=%%B"
        set "par3=%%C"
        setlocal EnableDelayedExpansion
        echo(!par2! !par1! !par2! !par3!
        endlocal
  )
) > aux1.txt.tmp

REM ** Now sort the first colum, but echo only the rest of the line
for /F "usebackq tokens=1,* delims= " %%A in (`sort /r aux1.txt.tmp`) DO (
    echo(%%B
)
于 2012-04-16T10:34:27.253 に答える
1

手遅れかもしれませんが、一般的なアドバイスとして、一時ファイルを作成するよりもはるかに簡単に行うことができます。並べ替えを介してすべてをパイプするだけです:

for /f "tokens=1-3" %%a in ('(for /f "tokens=1-3" %%x in (aux1.txt^) do @echo %%z %%x %%y^)^|sort') do echo %%b %%c %%a

これは単一のコマンドであり、バッチ ファイルをまったく使用せずにコマンド プロンプトで入力するだけで使用できることに注意してください (もちろん、そのためには %% を減らす必要があります)。

于 2012-06-08T06:45:32.543 に答える
0

私はJebの答えが本当に好きですが、Chris LaRosaの TextDBツールを何年も使用しています。

複数の列を並べ替えたり、別のツール (または他の CL ツール) をパイプしたりできます。なんか古い…

于 2012-04-16T22:59:56.477 に答える