Windows CMD 排序保留标题?

Windows CMD 排序保留标题?

需要在 Windows 中对带有标题行的大型 CSV 类文件进行排序(约 700 万行)。可以使用 CMD 命令 sort 成功执行此操作,但排序中包含标题行。我想将其保留在顶部。

我也有具有排序功能的 Notepad++,但是它无法处理我最大的两个文件(已报告错误)。

我愿意接受涉及 CMD 排序命令和其他解决方案的建议,最好是可以在 CMD 或 PowerShell 中编写脚本的建议(我还不太擅长)。

答案1

在 Powershell 中这非常容易做到,因为 Powershell 默认可以正确处理标头。

Import-Csv -Delimeter  ',' FILENAME | Sort -Property "Column name" | Export-Csv -NoTypeInformation -Delimeter ',' -Path NEW_FILENAME

Delimiter 参数(在导入和导出时)指定列分隔符。我使用了逗号,但有些 CSV 使用分号。
-NoTypeInformation 可防止导出包含数据类型信息,而这通常是您想要的。
将 FILENAME 替换为原始文件名,将 NEWFILENAME 替换为所需的输出名称。
将“Column name”替换为您想要作为排序键的列的名称(与标题中的拼写相同)。使用多个 -Property 参数对多个列进行排序。

答案2

这有一些行长度限制,但基本思想是运行命令来获取第一行(这里是以 set 开头的行),然后运行命令来获取其余行并对其进行排序。这看起来相当紧凑,可能适用于许多情况,但如果不适用,这些帖子提供了替代方案:

代码

set /p header=< input.csv && echo %header% > output.csv
more +1 input.csv | sort >> output.csv

这种变体也有效

(
  set /p header=< input.csv && echo %header%
  more +1 input.csv | sort
) > output.csv

相关内容