@BenVoigt dziwnego, że type file.txt | sort /uniquewspółpracuje z nieudokumentowanych przełącznika /uniquez sort.exenarzędzia (przynajmniej na systemie Windows 10). Z drugiej strony masz rację, że podanym przykładem jest PowerShell Get-Content file.txt | Sort-Object -unique.
@JosefZ, odpowiedź określa przełącznik za pomocą „/” (ukośnik do przodu), a nie myślnik; ukośnik do przodu jest standardem Windows dla poleceń w CMD i nie wszystkie polecenia pozwalają na zastąpienie myślnika ukośnikiem na przełącznikach poleceń. docs.microsoft.com/en-us/windows-server/administration/... w celu szybkiego zapoznania się konsekwentnie pokazuje ukośniki. Powyższe było świetną odpowiedzią, dzieląc smakołyk, który nie jest powszechnie znany, choć nie mogę sobie wyobrazić, dlaczego przełącznik „/ unique” jest nieudokumentowany, ponieważ jest tak użyteczny.
Istnieją porty uniq, które działają identycznie jak wersje GNU / Coreutils. Osobiście używam odmiany GOW, ale git dla Windows ma znacznie nowszą wersję . Nie wymaga to jednak cygwina. W przypadku tych ostatnich należy zajrzeć do katalogu / usr / bin
Ponieważ te pakiety zawierają również cat, sort i uniq - przepływ pracy powinien być w większości identyczny i cat file.txt |sort | uniqpowinien działać w większości identycznie
Możesz łatwo samodzielnie napisać polecenie „uniq”. Zapisz to w pliku wsadowym „uniq.cmd” gdzieś w% path% może go znaleźć (np. W% windir% \ system32). W tej wersji NIE jest rozróżniana wielkość liter:
@echo off
setlocal DisableDelayedExpansion
set "prev="
for /f "delims=" %%F in ('sort %*') do (
rem "set" needs to be done without delayed expansion
set "line=%%F"
setlocal EnableDelayedExpansion
set "line=!line:<=<!"
if /i "!prev!" neq "!line!" echo(!line!
set "prev=!line!"
endlocal
)
Działa to z „uniq mytextfile” oraz „cat mytextfile | uniq”; ponieważ wszystkie dane wejściowe i argumenty są po prostu przekazywane do polecenia sortowania.
Począwszy od systemu Windows 7, możesz chcieć naprawdę rozróżniać małe i wielkie litery (różnicą jest nieudokumentowany przełącznik „sort / C” i brak „if / i”):
@echo off
setlocal DisableDelayedExpansion
set "prev="
for /f "delims=" %%F in ('sort /C %*') do (
rem "set" needs to be done without delayed expansion
set "line=%%F"
setlocal EnableDelayedExpansion
set "line=!line:<=<!"
if "!prev!" neq "!line!" echo(!line!
set "prev=!line!"
endlocal
)
Dzięki, powód użycia techniki przełączania opóźnionego rozszerzenia nie był oczywisty ani wyraźny. Zredagowałem moje przykłady, aby były (prawie) idealne.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.
sort -u file.txt