使用Windows / DOS的shell /批处理命令,我如何拿一个文件,只保留唯一的行?

说我有一个像这样的文件:

apple pear lemon lemon pear orange lemon 

我怎么做才能保持独特的线条,所以我得到:

 apple pear lemon orange 

我可以修改原始文件或创build一个新的。

我想有一种方法可以一次扫描原始文件一行,检查该行是否存在于新文件中,然后追加(如果没有)。 我没有在这里处理真正的大文件。

 @echo off setlocal disabledelayedexpansion set "prev=" for /f "delims=" %%F in ('sort uniqinput.txt') do ( set "curr=%%F" setlocal enabledelayedexpansion if "!prev!" neq "!curr!" echo !curr! endlocal set "prev=%%F" ) 

它做什么:首先对输入进行排序,然后依次执行输入,只有当前行与前一行不同时才输出。 如果不需要处理特殊字符,这可能会更简单(这就是为什么这些setlocal/endlocal是为了)。
它只是回应stdout ,如果你想写文件做(假设你命名你的批myUniq.batmyUniq >>output.txt

没有一个简单的方法来从命令行做到这一点,没有额外的程序。

uniq会做你想做的。

或者你可以下载CoreUtils for Windows来获取GNU工具。 那么你可以使用sort -u来得到你想要的。

这些中的任何一个都可以从批处理文件中调用。

就个人而言,如果你需要像这样做很多文本操作,我认为你最好得到Cygwin 。 那么你可以轻松访问sortsedawkvim

从命令提示符运行PowerShell。

假设这些项目是在一个文件中调用fruits.txt,下面的代码将在uniques.txt中放入唯一的行:

键入fruits.txt | Sort-Object -unique | Out-File uniques.txt

我还在命令提示符中使用了Powershell,在我的文本文件所在的目录中,然后使用cat命令,sort命令和Get-Unique cmdlet,如http://blogs.technet.com上所述/b/heyscriptingguy/archive/2012/01/15/use-powershell-to-choose-unique-objects-from-a-sorted-list.aspx

它看起来像这样:

 PS C:\Users\username\Documents\VDI> cat .\cde-smb-incxxxxxxxx.txt | sort | Get-Unique > .\cde-smb-incxxxxxxx-sorted.txt 

使用GNU排序实用程序:

 sort -u file.txt 

如果你在Windows上并使用Gi​​t,那么排序和许多更有用的工具已经在这里:C:\ Program Files \ Git \ usr \ bin \

只需将此路径添加到您的%PATH%环境变量。

您可以使用SORT命令

例如

排序 test.txt> Sorted.txt