假设我有价值观
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完成此操作?
答案 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/$/-*/'