【问题标题】:Long to Wide Format [duplicate]长到宽格式[重复]
【发布时间】:2020-05-18 03:41:58
【问题描述】:

在 bash(可能使用 awk)中,我想将长格式的表格转换为宽格式。为简单起见:

输入:

A one
A two
A three
B seven
B eight
B nine

输出:

A one,two,three
B seven,eight,nine

【问题讨论】:

  • 欢迎来到 Stack Overflow。 SO 是一个面向专业和爱好者程序员的问答网站。目标是您将一些自己的代码添加到您的问题中,以至少显示您为解决这个问题所做的研究工作。

标签: bash parsing variables awk format


【解决方案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

(不需要排序输入)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2018-10-18
    • 2021-09-18
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多