有一个具有以下模式的文件
a 12
a 13
a 15
a 14
b 5
b 6
c 2
c 5
Run Code Online (Sandbox Code Playgroud)
我想根据第一列对它们进行分组,如下所示
a 12 13 15 14
b 5 6
c 2 5
Run Code Online (Sandbox Code Playgroud)
请建议
假设数据按第一列排序(如问题中所示),使用 GNUdatamash
按第一个空格分隔列进行分组并折叠第二列。
$ datamash -W groupby 1 collapse 2 <file
a 12,13,15,14
b 5,6
c 2,5
Run Code Online (Sandbox Code Playgroud)
将结果中第一列后面的制表符以及逗号替换为空格,以得到所需的输出:
$ datamash -W groupby 1 collapse 2 <file | tr '\t,' ' '
a 12 13 15 14
b 5 6
c 2 5
Run Code Online (Sandbox Code Playgroud)
如果输入未按第一列排序,则sort
首先传递数据,或datamash
与其-s
( --sort
) 选项一起使用。
您还可以使用Miller ( mlr
)及其nest
运算。使用此功能,您可以将第二列中的值“内爆”到第一列中每个唯一值的空格分隔列表中:
$ mlr --nidx nest --implode --values --across-records --nested-fs space -f 2 file
a 12 13 15 14
b 5 6
c 2 5
Run Code Online (Sandbox Code Playgroud)
或者,使用--ivar
miller 5.5.0 或更高版本的简写(除了在 6.0.0 中它被破坏):
$ mlr --nidx nest --ivar space -f 2 file
a 12 13 15 14
b 5 6
c 2 5
Run Code Online (Sandbox Code Playgroud)
数据不需要预先排序。
归档时间: |
|
查看次数: |
2001 次 |
最近记录: |