3

我想知道是否可以按列对文本文件进行排序。例如

我有这样aux1.txt的行

Name SecondName Grade

在外壳中我可以做到这一点

sort -r -k 3 aux1  

它按第 3 列(等级)对文件进行排序。

批量

sort /+3 < aux1.txt

在第三个字母之后对文件进行排序。

我阅读了批处理的排序手册,但没有结果。

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 回答
0

SortFileBySecondColumn.bat

@echo off
if "%1"=="" (
echo Syntax: %0 FileToSort.txt [/R]
echo /R means Sort in Reverse Order
goto Ende
)
set InputFile=%1
for /f "tokens=1-2* delims= " %%a in ('(for /f "tokens=1-2* delims= " %%n in (%InputFile%^) do @echo %%o %%n %%p^)^|sort %2') do echo %%b %%a %%c
:Ende

用法:SortFileBySecondColumn UnsortedFile.txt > SortedFile.txt
如果您在那时交换delims= delims=;则可以将其用于 CSV 文件。

示例输入文件:

172.20.17.59 PC00000781 # 14.01.2022 12:35:55
172.20.17.22 NB00001021 # 31.01.2022 14:40:38
172.20.16.114 TRANSFER14 # 11.02.2022 11:22:07
10.59.80.27 PC00001034 # 14.02.2022 15:39:23
10.59.80.140 XXBNB00173 # 16.02.2022 10:13:31
172.20.17.23 PC00000XXX # 18.02.2022 12:40:58
10.59.232.25 NB00000178 # 18.02.2022 14:38:53

结果输出文件:

10.59.232.25 NB00000178 # 18.02.2022 14:38:53 
172.20.17.22 NB00001021 # 31.01.2022 14:40:38 
172.20.17.59 PC00000781 # 14.01.2022 12:35:55 
172.20.17.23 PC00000XXX # 18.02.2022 12:40:58 
10.59.80.27 PC00001034 # 14.02.2022 15:39:23 
172.20.16.114 TRANSFER14 # 11.02.2022 11:22:07 
10.59.80.140 XXBNB00173 # 16.02.2022 10:13:31 
于 2022-02-25T13:19:21.793 回答