【PowerShell】テキストファイルをソートして、重複行を削除する

PowerShellで
 ・テキストファイルをソートして、重複行を削除
できます!

PR

コード

ここでは例として
 ・デスクトップ配下のテキストファイル「sample.txt」をソートして、重複行を削除
します。

テキストファイル「sample.txt」
テキストファイル「sample.txt」
テキストファイル「sample.txt」の内容(ソートされていない、重複行あり)
テキストファイル「sample.txt」の内容(ソートされていない、かつ重複行あり)

上記は「1,田中,2020/1/1」が重複しています。

# 対象ファイル
$targetFile = "C:\Users\user\Desktop\sample.txt"

$ws = New-Object -ComObject Wscript.Shell

try
{
    # 昇順でソートして重複削除
    (Get-Content $targetFile -ErrorAction Stop) | Sort-Object -Unique | Out-File -Encoding default $targetFile 
    # 降順でソートして重複削除
    # (Get-Content $targetFile -ErrorAction Stop) | Sort-Object -Descending -Unique | Out-File -Encoding default $targetFile 

    $ws.popup("ソート(重複削除含む)に成功しました。")
}
catch
{
    $ws.popup("エラー : " + $PSItem)
}

対象ファイルを指定します(2行目)。

「Get-Content」コマンドレットにより「対象ファイル」を取得します(9行目)。

「Sort-Object」コマンドレットにより「ソート」します(9行目)。
「-Unique」により重複行を削除します(9行目)。

PR

実行結果

テキストファイルをソートして、重複行を削除できました。

実行結果①
実行結果①
実行結果②
実行結果②
PR

参考①

「見出し(最初の1行)」をソート及び重複行削除の対象外にすることもできます。

# 対象ファイル
$targetFile = "C:\Users\user\Desktop\sample.txt"

$ws = New-Object -ComObject Wscript.Shell

try
{
    # 見出し(最初の1行)を取得
    $headLine = (Get-Content $targetFile -ErrorAction Stop) | Select-Object -First 1
    # 見出し以外を取得して、昇順でソートかつ重複行が削除された内容を取得
    $contents = (Get-Content $targetFile -ErrorAction Stop) | Select-Object -Skip 1 | Sort-Object -Unique
    
    # 元のファイルに見出しを出力
    Write-Output $headLine | Out-File -Encoding default $targetFile 
    # 元のファイルに見出し以外をの昇順でソートかつ重複行が削除されたされた内容を出力
    Write-Output $contents | Out-File -Encoding default $targetFile -Append

    $ws.popup("ソート(重複削除含む)に成功しました。")
}
catch
{
    $ws.popup("エラー : " + $PSItem)
}
PR

参考②

上記のコードで使用した以下の詳細は、公式サイトをご確認ください。

●コマンドレット「Get-Content」


●「Sort-Object」コマンドレット


●「Out-File」コマンドレット

タイトルとURLをコピーしました