Пакетно отсортировать файл с удалением дубликатов строки?

1452
Martin

Если у меня есть текстовый файл, я могу отсортировать его по команде sort input.txt output.txt. Можно ли как-то также удалить дубликаты строк из текстового файла? (В идеале я хотел бы получить решение, которое можно сделать в командном файле под Windows.)

Это в основном то же самое, что спрашивать, как удалить дубликаты из текстового файла. (Поскольку, очевидно, я могу сначала отсортировать, а затем использовать пакет для удаления дубликатов.) Причина, по которой я также упомянул сортировку, заключается в том, что я предполагаю, что удалить дубликаты проще, если мы знаем, что файл отсортирован и они могут появляться только в последовательных строках., Поэтому я думаю, что более вероятно, что есть некоторый способ удаления дубликатов вместе с сортировкой. (И для целей, в которых я хочу использовать этот идентификатор, не имеет значения, изменяется ли порядок строк в файле, если удалены повторяющиеся строки.)

Например, из файла, который выглядит так:

100 100 100 100 101 101 102 

Я хотел бы получить

100 101 102 
1
Это мой первый вопрос по SU. Я приложил все усилия, чтобы проверить, ответили ли они уже на сайте, а также выбрать правильные теги. Конечно, если более опытные пользователи сайта могут предложить более подходящие теги и указать мне на уже существующие сообщения, которые я пропустил, я буду благодарен. Martin 7 лет назад 0
Вам специально нужно сохранить это в родных инструментах Windows? Нет ли шансов использовать одну из более мощных сред сценариев, таких как Python или NodeJS? К сожалению, командная строка Windows (и, как следствие, пакетные файлы) не очень эффективна для динамической обработки данных. Это не невозможно, просто очень сложно. ZaLiTHkA 7 лет назад 0
@ZaLiTHkA Конечно, если нет решения с использованием пакетных файлов или если это очень сложно, я рассмотрю другие возможности. (Если я не ошибаюсь, unix sort может сделать это, поэтому, вероятно, cygwin или gnuwin32, возможно, помогут мне.) Конечно, я понимаю, что если кто-то привык к инструментам, которые вы упомянули, наиболее естественным решением для такого пользователя может быть их использование. , Однако в качестве первой возможности я спросил, выполнимо ли это с помощью командных файлов. Martin 7 лет назад 0
это определенно возможно, мне просто интересно, есть ли какие-то конкретные требования для этого. :) Решение Walmart справляется с этим очень хорошо, и гораздо более эффективно, чем я мог бы сделать с ** моим ** знанием инструментов Windows CLI. ZaLiTHkA 7 лет назад 0
Обратите внимание, что https://superuser.com не является бесплатным сервисом для написания скриптов / кодов. Если вы сообщите нам, что вы уже пробовали (включая скрипты / код, который вы уже используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask). DavidPostill 7 лет назад 0

1 ответ на вопрос

3
Pimp Juice IT

Пакетно отсортировать файл с удалением дубликатов строки?

Ниже приведен пакетный скрипт для Windows, как вы и просили, чтобы выполнить эту задачу; просто установите ваши входные и выходные переменные файла соответственно.

Бонус Примечание: если вы измените SET InputFile=%~1подобное, вы можете перетащить файл в сохраненный пакетный скрипт, и он выполнит задачу, используя простой метод перетаскивания.

Пакетный скрипт

@ECHO ON  SET InputFile=C:\folder\path\Input.txt ::SET InputFile=%~1 SET OutputFile=C:\folder\path\Output.txt  SET PSScript=%Temp%\~tmpRemoveDupe.ps1 IF EXIST "%PSScript%" DEL /Q /F "%PSScript%" ECHO Get-Content "%InputFile%" ^| Sort-Object ^| Get-Unique ^> "%OutputFile%">>"%PSScript%"  SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"  GOTO EOF 

Дополнительные ресурсы

Похожие вопросы