在bash中(也许使用awk),我想将长格式的表转换为宽表。为简单起见:
输入:
A one
A two
A three
B seven
B eight
B nine
输出:
A one,two,three
B seven,eight,nine
答案 0 :(得分:1)
一种使用GNU datamash的方式:
$ datamash -W -g1 collapse 2 < input.txt
A one,two,three
B seven,eight,nine
(这确实要求文件像您的示例一样在第一列上进行排序。否则,请在选项中添加-s
。)
使用perl
的另一种方法比awk
支持更复杂的数据结构,从而使存储项目列表更加容易:
$ perl -lane 'push @{$groups{$F[0]}}, $F[1];
END { $" = ",";
for $g (sort keys %groups) { print "$g\t@{$groups{$g}}" }}' input.txt
A one,two,three
B seven,eight,nine
(不需要排序的输入)