如何使用Bash收缩/缩小一组值

时间:2019-05-23 12:04:26

标签: linux bash shell

假设我有价值观

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

我需要输出为

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

或者简单地

value-al-*

类似地

valuealkeddka
valuealaljdf;
valuealdkdl;a

valueal{keddka, aljdf;, dkdl;a}

valueal*

如何使用bash完成此操作?

1 个答案:

答案 0 :(得分:2)

用于value-al-{keddka, aljdf;, dkdl;a}输出的Perl一线式:

$ 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/$/-*/'