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-ObjectPowerShell cmdlet bir destek -Uniqueolarak 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 /uniqueanahtar 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ı /uniquearasında sort.exe(veya Windows 10, en az) programı. Diğer taraftan, Get-Content file.txt | Sort-Object -uniqueaslında sağlanan örneğin PowerShell olduğunu haklısın .
sort /uniqueInvalid 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 | uniqolmalı 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 ^ caretveya 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-objectPowershell cmdlet'ini aşağıdaki gibi bir komut isteminde çağırabilirsiniz :
type file.txt | powershell -nop "$input | sort -unique"
sort -u file.txt