假设我有一个文件,例如:
apple
pear
lemon
lemon
pear
orange
lemon
我如何做到这一点,以便我只保留独特的线条,所以我得到:
apple
pear
lemon
orange
我可以修改原始文件或创建一个新文件。
我在想有一种方法可以一次扫描原始文件一行,检查该行是否存在于新文件中,如果不存在则追加。我在这里处理的不是非常大的文件。
假设我有一个文件,例如:
apple
pear
lemon
lemon
pear
orange
lemon
我如何做到这一点,以便我只保留独特的线条,所以我得到:
apple
pear
lemon
orange
我可以修改原始文件或创建一个新文件。
我在想有一种方法可以一次扫描原始文件一行,检查该行是否存在于新文件中,如果不存在则追加。我在这里处理的不是非常大的文件。
@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
),它可能会更简单。如果您想写入文件,
它只是将行回显到 do (假设您命名了您的 batch )stdout
myUniq.bat
myUniq >>output.txt
如果没有额外的程序,没有简单的方法可以从命令行执行此操作。
uniq
会做你想做的。
或者,您可以下载CoreUtils for Windows以获取 GNU 工具。然后你可以用它sort -u
来得到你想要的。
其中任何一个都应该可以从批处理文件中调用。
不过,就个人而言,如果您需要进行大量这样的文本操作,我认为您最好使用Cygwin。然后您就可以轻松访问sort
, sed
, awk
,vim
等。
从命令提示符运行 PowerShell。
假设这些项目在文件调用fruits.txt
中,以下将把唯一的行放在uniques.txt
:
type fruits.txt | Sort-Object -unique | Out-File uniques.txt
在 Windows 10sort.exe
中有一个隐藏标志/unique
,您可以使用它
C:\Users>sort fruits.txt
apple
lemon
lemon
lemon
orange
pear
pear
C:\Users>sort /unique fruits.txt
apple
lemon
orange
pear
Windows 10 中的SORT
命令确实有一个未记录的开关来删除重复的行。
SORT /UNIQ File.txt /O Fileout.TXT
但是使用纯批处理文件的更防弹选项,您可以使用以下内容。
@echo off
setlocal disableDelayedExpansion
set "file=MyFileName.txt"
set "sorted=%file%.sorted"
set "deduped=%file%.deduped"
::Define a variable containing a linefeed character
set LF=^
::The 2 blank lines above are critical, do not remove
sort "%file%" >"%sorted%"
>"%deduped%" (
set "prev="
for /f usebackq^ eol^=^%LF%%LF%^ delims^= %%A in ("%sorted%") do (
set "ln=%%A"
setlocal enableDelayedExpansion
if /i "!ln!" neq "!prev!" (
endlocal
(echo %%A)
set "prev=%%A"
) else endlocal
)
)
>nul move /y "%deduped%" "%file%"
del "%sorted%"
我还在命令提示符下使用了 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,那么 sort 和更多有用的实用程序已经在这里:C:\Program Files\Git\usr\bin\
只需将此路径添加到您的 %PATH% 环境变量中。
您可以使用排序命令
例如
排序测试.txt > 排序.txt