Bir metin dosyasından yinelenen satırları kaldırmak gerekir, Linux kullanarak basit
cat file.txt |sort | uniq
file.txt içerdiğinde
aaa
bbb
aaa
ccc
Çıktı verecek
aaa
bbb
ccc
Windows eşdeğeri var mı? ya da bu nasıl bir Windows yolunda?
Bir metin dosyasından yinelenen satırları kaldırmak gerekir, Linux kullanarak basit
cat file.txt |sort | uniq
file.txt içerdiğinde
aaa
bbb
aaa
ccc
Çıktı verecek
aaa
bbb
ccc
Windows eşdeğeri var mı? ya da bu nasıl bir Windows yolunda?
Yanıtlar:
Sort-Object
PowerShell cmdlet bir destek -Unique
olarak aynı şeyi yapar anahtarı uniq
:
Get-Content file.txt | Sort-Object -unique
Elbette, PowerShell'de takma adların varlığı nedeniyle, şunları da yazabilirsiniz:
type file.txt | sort -unique
Ayrıca, Windows 10'da belgelenmemiş bir /unique
anahtar vardır sort.exe
, bu nedenle Komut İstemi'nde çalışması gerekir:
type file.txt | sort /unique
sort.exe
) bunu desteklediğini düşünmüyorum ; PowerShell yerleşiminin bir özelliğine benziyor.
type file.txt | sort /unique
çalışan kayıt dışı anahtarı /unique
arasında sort.exe
(veya Windows 10, en az) programı. Diğer taraftan, Get-Content file.txt | Sort-Object -unique
aslında sağlanan örneğin PowerShell olduğunu haklısın .
sort /unique
Invalid switch.
7 Enterprise ile ilgili hatalar .
GNU / coreutils sürümleriyle aynı şekilde çalışan uniq bağlantı noktaları vardır. Ben şahsen GOW varyasyon kullanın ama pencereler için git önemli ölçüde yeni bir sürümü var . / Usr / bin içine bakmanız gereken ikinci şey için cygwin gerekmez
Bu paketler ayrıca kedi, sıralama ve tek parça içerdiğinden - iş akışınız çoğunlukla aynı cat file.txt |sort | uniq
olmalı ve çoğunlukla aynı şekilde çalışmalıdır
Kolayca "uniq" komutunu kendiniz yazabilirsiniz. Bunu,% path% dosyanızın herhangi bir yerinde "uniq.cmd" adlı bir toplu iş dosyasına kaydedin (örneğin,% windir% \ system32 içinde). Bu sürüm büyük / küçük harfe duyarlı DEĞİLDİR:
@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
)
Bu "uniq mytextfile" ve "cat mytextfile | uniq" ile çalışır; çünkü tüm girdi ve argümanlar sort komutuna aktarılır.
Windows 7'den başlayarak, gerçekten büyük / küçük harfe duyarlı bir sürüm isteyebilirsiniz (fark "belgelenmemiş anahtar" sort / C "ve no" if / i "yok):
@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
)
/?
, ON
, one ^ caret
veya bang!
. Ama bu kullanılarak çözülebilir değiştirilirken gecikmiş genişletme tekniği ve echo(
: bkz Dostips: ECHO. Metin veya boş satır
Yu Jiaao'nun cevabına ek. sort-object
Powershell cmdlet'ini aşağıdaki gibi bir komut isteminde çağırabilirsiniz :
type file.txt | powershell -nop "$input | sort -unique"
sort -u file.txt