说我有一个像这样的文件:
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.bat
) myUniq >>output.txt
没有一个简单的方法来从命令行做到这一点,没有额外的程序。
uniq会做你想做的。
或者你可以下载CoreUtils for Windows来获取GNU工具。 那么你可以使用sort -u
来得到你想要的。
这些中的任何一个都可以从批处理文件中调用。
就个人而言,如果你需要像这样做很多文本操作,我认为你最好得到Cygwin 。 那么你可以轻松访问sort
, sed
, awk
, vim
等
从命令提示符运行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上并使用Git,那么排序和许多更有用的工具已经在这里:C:\ Program Files \ Git \ usr \ bin \
只需将此路径添加到您的%PATH%环境变量。
您可以使用SORT命令
例如
排序 test.txt> Sorted.txt