У меня есть текстовый файл:
1 2 4 5 6 7 1 3 5 6 7 8 1 2 3 4 5 6 1 2 4 5 6 7
Здесь первая и последняя строка одинаковы. У меня много файлов с двойными строками. Мне нужно удалить все дубликаты.
Все это кажется действительно сложным.Это так же просто, как:
gc $filename | sort | get-unique > $output
Использование реальных имен файлов вместо переменных:
gc test.txt| sort | get-unique > unique.txt
Чтобы получить уникальные строки:
PS > Get-Content test.txt | Select-Object -Unique 1 2 4 5 6 7 1 3 5 6 7 8 1 2 3 4 5 6
Для удаления дубликата
PS > Get-Content test.txt | group -noelement | ` where {$_.count -eq 1} | select -expand name 1 3 5 6 7 8 1 2 3 4 5 6
Если заказ не важен:
Get-Content test.txt | Sort-Object -Unique | Set-Content test-1.txt
Если заказ важен:
$set = @{} Get-Content test.txt | %{ if (!$set.Contains($_)) { $set.Add($_, $null) $_ } } | Set-Content test-2.txt
$file = "C:\temp\filename.txt" (gc $file | Group-Object | %{$_.group | select -First 1}) | Set-Content $file
Исходный файл теперь содержит только уникальные строки
Уже опубликованные опции у меня почему-то не работают
Попробуйте что-то вроде этого:
$a = @{} # declare an arraylist type gc .\mytextfile.txt | % { if (!$a.Contains($_)) { $a.add($_)}} | out-null $a #now contains no duplicate lines
Чтобы установить содержимое $ a в mytextfile.txt:
$a | out-file .\mytextfile.txt