Любой язык - [решено] Объединение похожих ссылок

Аватара пользователя
Alexander_88

Любой язык - [решено] Объединение похожих ссылок

Сообщение Alexander_88 »

Здравствуйте, я опять за помощью Изображение

Присутствует список ссылок в тхт файле.. пример:





Код:

Код: Выделить всё

[VFG-181] - 2.2 GB
[START-141_A] - 854.2 MB
[START-141_B] - 625.1 MB
[WWE-320] - 1.8 GB

необходимо сделать так, чтобы похожие имена ссылок объеденились в одну строчку, притом, нижняя ссылка становилась справа от верхней. Объединенных ссылок может быть несколько. (две, три, пять...)

Я выделил то, что необходимо проверять.

Известно то, что объединенные ссылки в выделенной части имеют одно и тоже название до символа "_"

после символа может уже быть по разному, к примеру А, B, C или CD1, CD2, CD3 и т.д.

также известно, что квадратные скобки есть только в одном месте (рядом с выделенной частью).

еще в объединенных ссылках всегда есть символ "_" А в обычных ссылках его нету (речь идет не для всей ссылки целиком, а только для зоны в квадратных скобках, которая выделена жирным)

В конце применения БАТ не должно оставаться пустых строк.



Если применить готовый бат на вышеуказанном списке ссылок, должно получиться так:





Код:

Код: Выделить всё

[VFG-181] - 2.2 GB
[START-141_A] - 854.2 MB | [START-141_B] - 625.1 MB
[WWE-320] - 1.8 GB
Аватара пользователя
Alexander_88

Re: Любой язык - [решено] Объединение похожих ссылок

Сообщение Alexander_88 »

Немножко отредактировал. Хотелось чтобы ссылки объединялись без разделителя |

т.е. просто слитно в одну строчку Изображение



поменял также префикс в теме на "любой язык"

но нужно то, что не требует установки, и необходимо данный файл (который получится) запустить из другого бат файла
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Объединение похожих ссылок

Сообщение Foreigner »

PowerShell:



Код:

Код: Выделить всё

$content = get-content 1.txt
$groups = $content -replace '.+\[([^_]+)(\]|_.+\]).*','$1' | get-unique
foreach ($group in $groups) {
    $content -match $group | foreach { $string += $_ }
    $string | add-content 2.txt
    $string = $null
}
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Объединение похожих ссылок

Сообщение Foreigner »

PowerShell:



Код:

Код: Выделить всё

$content = get-content 1.txt
$groups = $content -replace '.+\[([^_]+)(\]|_.+\]).*','$1' | get-unique
foreach ($group in $groups) {
    $content -match $group | foreach { $string += $_ }
    $string | add-content 2.txt
    $string = $null
}
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Объединение похожих ссылок

Сообщение Foreigner »

С Group-Object решение выглядит лаконичней, пора брать на вооружение.
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Объединение похожих ссылок

Сообщение Foreigner »

Спасибо всем за помощь



Foreigner вашь вариант попробовал, почему то выдается пустой 2.txt



Kazun проверил, работает





Подскажите, а как из бат файла запустить данный скрипт? что нужно прописать в бат файле, чтобы он начал выполнять скрипт, дождался его завершения, а дальше продолжил выполняться
Аватара пользователя
Alexander_88

Re: Любой язык - [решено] Объединение похожих ссылок

Сообщение Alexander_88 »

Kazun, работает, спасибо, мне уже не удобно просить... все таки потребовался разделитель между объединенными ссылками, вот такой

Код:

его можно как - то встроить в существующий код?Изображение
Аватара пользователя
Kazun

Re: Любой язык - [решено] Объединение похожих ссылок

Сообщение Kazun »

Код:

Код: Выделить всё

(gc 1.txt) | Group {$_.split("_",3)[1]} | % {$_.Group -join ""} > 2.txt
Ответить

Вернуться в «Скриптовые языки администрирования Windows»