в powershell Я хотел бы удалить повторяющуюся строку в текстовом файле, когда они начинаются аналогично:
https://mysite.local/9999/9999_01_00.jpg?Watchout=1588338564&User=oj-e39DOyiUJCjtG3E2DWaeT8Q8_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_01.jpg?Watchout=1182344561&User=EjHBJ-biGSlM-ewPMVs_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_01.jpg?Watchout=1182344561&User=EjHBJ-biGSlM-ewPMVs_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_01.jpg?Watchout=1182344561&User=EjHBJ-biGSlM-ewPMVs_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_02.jpg?Watchout=1182344561&User=IPElkKyuulUYY1AL~~y4Y-HedKarGntAexw14_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_02.jpg?Watchout=1182344561&User=IPElkKyuulUYY1AL~~y4Y-HedKarGntAexw14_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_02.jpg?Watchout=1182344561&User=IPElkKyuulUYY1AL~~y4Y-HedKarGntAexw14_&dominus=3PK5GF6789 https://mysite.local/9999/9999_02_00.jpg?Watchout=1182344561&User=VIybnoLd8cthJ7MfsFM6EfD3M_&dominus=3PK5GF6789
Должно стать в моем текстовом файле:
https://mysite.local/9999/9999_01_00.jpg?Watchout=1588338564&User=oj-e39DOyiUJCjtG3E2DWaeT8Q8_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_01.jpg?Watchout=1182344561&User=EjHBJ-biGSlM-ewPMVs_&dominus=3PK5GF6789 https://mysite.local/9999/9999_01_02.jpg?Watchout=1182344561&User=IPElkKyuulUYY1AL~~y4Y-HedKarGntAexw14_&dominus=3PK5GF6789 https://mysite.local/9999/9999_02_00.jpg?Watchout=1182344561&User=VIybnoLd8cthJ7MfsFM6EfD3M_&dominus=3PK5GF6789
Потому что я считаю 3 раза: https://mysite.local/9999/9999_01_01.jpg, мне нужен только один раз каждый файл JPG: 9999_01_00.jpg
как я могу это сделать? удалить дублирующую строку не очень сложно, но когда строки не очень похожи, это немного сложнее!
спасибо!
Один из способов сделать это:
$newText = Get-Content -Path 'X:\FileWithUrls.txt' | Group-Object @{Expression = { ($_ -split '\?')[0]}} | ForEach-Object { $_.Group[0] } # output on screen $newText # output to new text file $newText | Set-Content -Path 'X:\DeDupedFileWithUrls.txt' -Force
Вывод:
Group-Object группирует похожие строки из текстового файла вместе. Это основано на предоставляемом нами свойстве, и в данном случае это часть строки перед ?.
Group-Object
?
Чтобы получить это, мы просто разбиваем строку на вопросительном знаке и используем только первую часть [0].
[0]
, потому что -split использует регулярное выражение, нам нужно избежать этого с \?
-split
\?
Это обернуто внутри вычисленного (на Свойство -fly) с @{Expression = { ($_ -split '\?')[0]}}
@{Expression = { ($_ -split '\?')[0]}}
Далее мы проводим oop через группы и выводим только первый элемент каждой группы