テキストファイルから重複する行を削除する必要があります。Linuxでは、
cat file.txt |sort | uniq
file.txtに含まれる場合
aaa
bbb
aaa
ccc
出力されます
aaa
bbb
ccc
Windowsに相当するものはありますか?またはどのようにこれをWindowsの方法で行いますか?
テキストファイルから重複する行を削除する必要があります。Linuxでは、
cat file.txt |sort | uniq
file.txtに含まれる場合
aaa
bbb
aaa
ccc
出力されます
aaa
bbb
ccc
Windowsに相当するものはありますか?またはどのようにこれをWindowsの方法で行いますか?
回答:
Sort-Object
PowerShell のコマンドレット-Unique
は、次と同じことを行うスイッチをサポートしていuniq
ます。
Get-Content file.txt | Sort-Object -unique
もちろん、PowerShellにエイリアスが存在するため、次のように記述することもできます。
type file.txt | sort -unique
さらに、Windows 10 /unique
にsort.exe
は文書化されていないスイッチがあるため、これはコマンドプロンプトで機能するはずです。
type file.txt | sort /unique
sort.exe
)はこれをサポートしていないと思います。PowerShellビルトインの機能のように見えます。
type file.txt | sort /unique
動作します(少なくともWindows 10では)。反対に、提供されている例は実際にはPowerShell です。/unique
sort.exe
Get-Content file.txt | Sort-Object -unique
sort /unique
Invalid switch.
Windows 7 Enterpriseでのエラー。
コマンド「uniq」は自分で簡単に書くことができます。これを%path%のどこかにあるバッチファイル "uniq.cmd"に保存します(例:%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
)
これは「uniq mytextfile」と「cat mytextfile | uniq」で機能します。すべての入力と引数は単にsortコマンドに渡されるためです。
Windows 7以降では、本当に大文字と小文字を区別するバージョンが必要になる場合があります(違いは、文書化されていないスイッチ "sort / C"であり、 "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
)
/?
、ON
、one ^ caret
またはbang!
。しかし、それはトグルする遅延拡張技術を使用することで解決でき、echo(
以下を参照してください:Dostips:ECHO。テキストまたは空白行を表示できない
Yu Jiaaoの回答への追加。sort-object
次のようなコマンドプロンプトでpowershellコマンドレットを呼び出すことができます。
type file.txt | powershell -nop "$input | sort -unique"
sort -u file.txt