9

假设我有一个文件,例如:

apple
pear
lemon
lemon
pear
orange
lemon

我如何做到这一点,以便我只保留独特的线条,所以我得到:

apple
pear
lemon
orange

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

我在想有一种方法可以一次扫描原始文件一行,检查该行是否存在于新文件中,如果不存在则追加。我在这里处理的不是非常大的文件。

4

8 回答 8

12
@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 )stdoutmyUniq.batmyUniq >>output.txt

于 2012-10-11T20:24:41.520 回答
2

如果没有额外的程序,没有简单的方法可以从命令行执行此操作。

uniq会做你想做的。

或者,您可以下载CoreUtils for Windows以获取 GNU 工具。然后你可以用它sort -u来得到你想要的。

其中任何一个都应该可以从批处理文件中调用。

不过,就个人而言,如果您需要进行大量这样的文本操作,我认为您最好使用Cygwin。然后您就可以轻松访问sort, sed, awk,vim等。

于 2012-10-11T18:46:44.303 回答
2

从命令提示符运行 PowerShell。

假设这些项目在文件调用fruits.txt中,以下将把唯一的行放在uniques.txt

type fruits.txt | Sort-Object -unique | Out-File uniques.txt
于 2014-06-23T15:21:10.397 回答
2

在 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
于 2020-05-04T16:44:17.607 回答
0

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%"
于 2020-07-24T22:58:37.740 回答
-2

我还在命令提示符下使用了 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
于 2014-12-05T14:13:28.057 回答
-2

使用 GNU 排序实用程序:

sort -u file.txt

如果您在 Windows 上并使用 Git,那么 sort 和更多有用的实用程序已经在这里:C:\Program Files\Git\usr\bin\

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

于 2017-04-28T08:36:39.103 回答
-5

您可以使用排序命令

例如

排序测试.txt > 排序.txt

于 2013-10-14T12:45:27.503 回答