Используя команды Windows / dos shell / batch, как взять файл и сохранить только уникальные строки?

скажем у меня есть файл, как:

apple
pear
lemon
lemon
pear
orange
lemon

Как сделать так, чтобы я сохранял только уникальные строки, поэтому я получаю:

apple
pear
lemon
orange

Я могу либо изменить исходный файл, либо создать новый.

Я думаю, что есть способ сканировать исходный файл по строке за раз, проверить, существует ли строка в новом файле, а затем добавить, если это не так. Я имею дело не с очень большими файлами.

6 ответов


@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, Если вы хотите записать в файл do (при условии, что вы назвали свой пакет myUniq.bat) myUniq >>output.txt


нет простого способа сделать это из командной строки без дополнительной программы.

uniq будет делать то, что вы хотите.

или вы можете скачать CoreUtils для Windows чтобы получить инструменты GNU. Тогда вы можете просто использовать sort -u чтобы получить то, что вы хотите.

любой из них должен вызываться из пакетного файла.

лично хотя, если вам нужно сделать много работы с текстом, как, думаю, вам было бы лучше получение Cygwin. Тогда у вас будет легкий доступ к sort, sed, awk, vim, etc.


запустите PowerShell из командной строки.

предполагая, что элементы находятся в файле называть фрукты.txt, следующее поставит уникальные линии в uniques.txt:

фрукты типа.txt |Sort-Object-unique / Out-File uniques.txt


Я также использовал Powershell из командной строки в каталоге, в котором находится мой текстовый файл, а затем я использовал команду cat, команду sort и командлет Get-Unique, как упоминалось в 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 файлы\Git\usr\bin\

просто добавьте этот путь к переменной среды %PATH%.


вы можете использовать команду sort

например

вроде