Мне нужно, если возможно, удалить на месте повторяющиеся строки в пути с несколькими текстовыми файлами в powershell.
Я нашел способ получить список строк:
Get-Content "$path\*.*" | Group-Object | Where-Object { $_.Count -gt 1 } | Select -ExpandProperty Name
Теперь я думаю, что цикл foreach
будет полезен, но я не знаю, как обрабатывать действие удаления на месте...
Может кто-то мне помочь, пожалуйста?
РЕДАКТИРОВАТЬ: я изменил название вопроса, чтобы избежать недоразумений!
РЕДАКТИРОВАТЬ 2 (на основе подсказки Олафа):
PS C:\Users\Robbi> $mypath = "F:\DATA\Urls_CP"
PS C:\Users\Robbi> Get-ChildItem -Path $mypath -Filter * |
>> ForEach-Object{
>> $Content =
>> Get-Content -Path $_.FullName | Sort-Object -Unique
>> $Content | Out-File -FilePath $_.FullName
>> }
PS C:\Users\Robbi> Get-Content $mypath\* | Select-String "https://httpd.apache.org/docs/2.4/mod/mod_md.html"
https://httpd.apache.org/docs/2.4/mod/mod_md.html
https://httpd.apache.org/docs/2.4/mod/mod_md.html
Но что-то изменилось, я скопировал исходную папку с именем «Urls» и запустил ваш код в скопированной папке «Urls_CP»; Размер «Urls_CP» примерно на 200 КБ больше, чем исходный «URLS»!
Просто для информации: каждый файл представляет собой управляемый powershell «access.log» прокси-сервера Squid из linux vm, но я проверил кодировку и наличие «странных» символов с помощью notepad ++. (у меня нет доступа к оболочке Linux)
Это выдержка из одного файла в папке «URLS»:
https://community.checkpoint.com/t5/API-CLI-Discussion-and-Samples/can-anybody-let-me-know-how-can-we-import-policy-rules-via-csv/td-p/20839
https://community.checkpoint.com/t5/API-CLI-Discussion-and-Samples/Python-tool-for-exporting-importing-a-policy-package-or-parts-of/td-p/41100
https://community.checkpoint.com/t5/General-Management-Topics/R80-10-API-bug-fallback-to-quot-SmartCenter-Only-quot-after/m-p/5074
https://github.com/CheckPointSW/cp_mgmt_api_python_sdk
https://github.com/CheckPointSW/cpAnsible/issues/2
https://github.com/CheckPointSW/ExportImportPolicyPackage/issues
https://stackoverflow.com/questions/15031694/installing-python-packages-from-local-file-system-folder-to-virtualenv-with-pip
https://stackoverflow.com/questions/24627525/fatal-error-in-launcher-unable-to-create-process-using-c-program-files-x86
https://stackoverflow.com/questions/25749621/whats-the-difference-between-pip-install-and-python-m-pip-install
https://stackoverflow.com/questions/42494229/how-to-pip-install-a-local-python-package
РЕДАКТИРОВАТЬ 3:
Пожалуйста, простите меня, я постараюсь объяснить мне лучше!
Я бы сохранил структуру папки «URLS», которая содержит несколько файлов; Я бы удалил (или заменил на «$ null») дубликаты «для всех файлов», но сохранил бы каждый файл в папке, то есть: не один большой файл со всем http-адресом внутри! В EDIT 2 я показал Олафу, что строка "https://httpd.apache.org/docs/2.4/mod/mod_md.html"
все еще дублируется, потому что она присутствует в "$mypath\file1.txt"
и в файле "$mypath\file512.txt"
! Я понимаю, что проверка кода Олафа на наличие дубликатов «для каждого файла» (спасибо @Lee_Dailey, у меня есть непонятное в моем вопросе!)
РЕДАКТИРОВАТЬ 4:
$SourcePath = 'F:\DATA\Urls_CP'
$TargetPath = 'F:\DATA\Urls_CP\DeDupe'
$UrlList = Get-ChildItem -Path $SourcePath -Filter *.txt |
ForEach-Object {
$FileName = $_.BaseName
$FileLWT = (Get-ItemProperty $_.FullName).LastWriteTime
Get-Content -Path $_.FullName -Encoding default |
ForEach-Object {
[PSCustomObject]@{
URL = $_
File = $FileName
LWT = $FileLWT
}
}
}
$UrlList |
Sort-Object -Property URL -Unique |
ForEach-Object {
$TargetFile = Join-Path -Path $TargetPath -ChildPath ($_.File + '.txt')
$_.URL | Out-File -FilePath $TargetFile -Append -Encoding default
Set-ItemProperty $TargetFile -Name LastWriteTime -Value $_.LWT
}
Olaf
теперь знает ответ на ваш вопрос. рад узнать, что у вас это работает так, как нужно. - person Lee_Dailey   schedule 17.05.2020