テキストファイルから重複する行を削除する必要があります。Linuxでは次のように簡単です。
cat file.txt |sort | uniq
file.txtに含まれる場合
aaa
bbb
aaa
ccc
出力します
aaa
bbb
ccc
同等のWindowsはありますか?またはどのようにこれはWindowsの方法で?
PowerShellのSort-Object
コマンドレットは、uniq
と同じことを行う-Unique
スイッチをサポートします。
Get-Content file.txt | Sort-Object -unique
もちろん、PowerShellにエイリアスが存在するため、次のように書くこともできます。
type file.txt | sort -unique
さらに、Windows 10の/unique
には文書化されていないsort.exe
スイッチがあるので、これはコマンドプロンプトで動作するはずです。
type file.txt | sort /unique
Gnu/coreutilsバージョンと同じように動作するuniqのportsがあります。私は個人的に GOW のバリエーションを使用していますが、Windows用gitにはかなり 新しいバージョンがあります 。 cygwinは必要ありませんが、後者の場合は/ usr/binを調べる必要があります。
これらのパッケージにはcat、sort、uniqも含まれているので - あなたのワークフローはほとんど同じであるべきで、そしてcat file.txt |sort | uniq
はほとんど同じように働くべきです
あなたは自分で簡単に "uniq"というコマンドを書くことができます。これをバッチファイル "uniq.cmd"に保存して、%path%のどこかに見つけることができます(例:%windir%\ system32)。このバージョンでは大文字と小文字が区別されません。
@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
)
これは、 "cat mytextfile | uniq"と同様に "uniq mytextfile"でも動作します。すべての入力と引数は単にsortコマンドに渡されるためです。
Windows 7から、あなたは本当に大文字と小文字を区別するバージョンが欲しいかもしれません(違いは文書化されていないスイッチ "sort/C"とno "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
)