Как я могу использовать Bash для сокращения / сокращения набора значений - PullRequest
0 голосов
/ 23 мая 2019

Допустим, у меня есть значения

value-al-keddka
value-al-aljdf;
value-al-dkdl;a

Мне нужно вывести как

value-al-{keddka, aljdf;, dkdl;a}

или просто

value-al-*

Аналогично

valuealkeddka
valuealaljdf;
valuealdkdl;a

to

valueal{keddka, aljdf;, dkdl;a}

или

valueal*

Как мне это сделать с помощью bash?

1 Ответ

2 голосов
/ 23 мая 2019

Однострочный Perl для value-al-{keddka, aljdf;, dkdl;a} вывода:

$ perl -F- -lanE 'push @{$vals{$F[0]}{$F[1]}}, $F[2];
                  END { $"=","; while (($v1,$h1) = each %vals) { while (($v2, $v3) = each %$h1) { say "$v1-$v2-{@$v3}" }}}' input.txt

Или с использованием GNU datamash и sed для того же вывода:

$ datamash -Ws -t- groupby 1,2 collapse 3 < input.txt | sed -E 's/^([^-]+-[^-]+-)(.*)/\1{\2}/'

Или дляvalue-al-* вывод:

$ cut -d- -f1,2 input.txt | sort -u | sed -e 's/$/-*/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...