LINUX.ORG.RU

История изменений

Исправление php-coder, (текущая версия) :

Чтобы не быть голословным, вот моё решение:

$ cat t
https://domain.com/issues/501|Project3 (desc of Project3)
https://domain.com/issues/695|Project4 (desc of Project4)
https://domain.com/issues/18|Project1 (desc of Project1)
https://domain.com/issues/13|Project2 (desc of Project2)
https://domain.com/issues/500|Project3 (desc of Project3)
https://domain.com/issues/696|Project4 (desc of Project4)
https://domain.com/issues/22|Project2 (desc of Project2)
https://domain.com/issues/698|Project4 (desc of Project4)

$ sort -t'|' -k2 -u t | while IFS="|" read TASK PROJ; do printf "$PROJ\n%s\n\n" "$(fgrep "$PROJ" t | cut -d'|' -f1)"; done
Project1 (desc of Project1)
https://domain.com/issues/18

Project2 (desc of Project2)
https://domain.com/issues/13
https://domain.com/issues/22

Project3 (desc of Project3)
https://domain.com/issues/501
https://domain.com/issues/500

Project4 (desc of Project4)
https://domain.com/issues/695
https://domain.com/issues/696
https://domain.com/issues/698

$

Но вам понадобится модифицировать вывод SQL, чтобы он разделял записи с помощью pipe (я бы использовать CONCAT_WS() для этого).

Вероятно, есть решение по-лучше, но я так понимаю вам не критичная производительность, а важно просто сделать, чтобы работало.

(P.S. В чем тут идея: сначала получить список уникальных ключей, в нашем случае это названия проектов. Затем мы проходимся по каждому проекту и для него находим все issues. Тут некрасиво то, что файл читается N+1 раз, где N это число проектов. Думаю, что на баше можно как-нибудь это решить красиво с помощью массивов, но в них я не силен.)

Исходная версия php-coder, :

Чтобы не быть голословным, вот моё решение:

$ cat t
https://domain.com/issues/501|Project3 (desc of Project3)
https://domain.com/issues/695|Project4 (desc of Project4)
https://domain.com/issues/18|Project1 (desc of Project1)
https://domain.com/issues/13|Project2 (desc of Project2)
https://domain.com/issues/500|Project3 (desc of Project3)
https://domain.com/issues/696|Project4 (desc of Project4)
https://domain.com/issues/22|Project2 (desc of Project2)
https://domain.com/issues/698|Project4 (desc of Project4)

$ sort -t'|' -k2 -u t | while IFS="|" read TASK PROJ; do printf "$PROJ\n%s\n\n" "$(fgrep "$PROJ" t | cut -d'|' -f1)"; done
Project1 (desc of Project1)
https://domain.com/issues/18

Project2 (desc of Project2)
https://domain.com/issues/13
https://domain.com/issues/22

Project3 (desc of Project3)
https://domain.com/issues/501
https://domain.com/issues/500

Project4 (desc of Project4)
https://domain.com/issues/695
https://domain.com/issues/696
https://domain.com/issues/698

$

Но вам понадобится модифицировать вывод SQL, чтобы он разделял записи с помощью pipe (я бы использовать CONCAT_WS() для этого).

Вероятно, есть решение по-лучше, но я так понимаю вам не критичная производительность, а важно просто сделать, чтобы работало.