Potrzebuję usunąć zduplikowane linie z pliku tekstowego, w Linuksie jest to proste
cat file.txt |sort | uniq
gdy plik.txt zawiera
aaa
bbb
aaa
ccc
Wyjdzie
aaa
bbb
ccc
Czy istnieje odpowiednik systemu Windows? lub jak to zrobić w sposób Windows?
sort -u file.txt
Odpowiedzi:
Polecenie
Sort-Object
cmdlet w programie PowerShell obsługuje-Unique
przełącznik, który robi to samo, couniq
:Oczywiście, dzięki obecności aliasów w PowerShell, możesz także napisać:
Ponadto
/unique
wsort.exe
systemie Windows 10 znajduje się nieudokumentowany przełącznik , więc powinno to działać w wierszu polecenia:źródło
sort.exe
) to obsługiwało; wygląda jak funkcja wbudowana w PowerShell.type file.txt | sort /unique
współpracuje z nieudokumentowanych przełącznika/unique
zsort.exe
narzędzia (przynajmniej na systemie Windows 10). Z drugiej strony masz rację, że podanym przykładem jest PowerShellGet-Content file.txt | Sort-Object -unique
.sort /unique
błędy zInvalid switch.
Windows 7 Enterprise.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 | uniq
powinien działać w większości identycznieźródło
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:
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”):
źródło
/?
,ON
,one ^ caret
lubbang!
. Ale można to rozwiązać za pomocą przełączającej techniki opóźnionej ekspansji iecho(
zobacz: Dostips: ECHO. NIE MOŻE podać tekstu lub pustej liniiDodatek do odpowiedzi Yu Jiaao. Możesz wywołać polecenie
sort-object
cmdlet programu PowerShell w wierszu polecenia, takim jak:źródło