【问题标题】:Awk - extracting information from an xyz-format matrixawk - 从 xyz 格式矩阵中提取信息
【发布时间】:2013-08-20 04:08:33
【问题描述】:

我有一个 x y z 矩阵的格式:

1 1 0.02
1 2 0.10
1 4 0.22
2 1 0.70
2 2 0.22
3 2 0.44
3 3 0.42

...等等。我有兴趣将特定 x 值(第 1 列)的所有 z 值(第 3 列)相加,并在单独的行上打印输出(以 x 值作为前缀),这样前一个示例的输出将显示为:

1 0.34
2 0.92
3 0.86

我强烈认为 awk 是完成这项工作的合适工具,但对 awk 的了解确实很缺乏,我非常感谢任何人提供的任何帮助。

提前致谢。

【问题讨论】:

    标签: matrix awk


    【解决方案1】:

    我同意awk 是完成这项工作的好工具——这几乎正是它的设计目标。

    awk '{ sum[$1] += $3 } END { for (i in sum) print i, sum[i] }' data
    

    对于给定的数据,我得到:

    2 0.92
    3 0.86
    1 0.34
    

    显然,您可以将输出通过管道传输到sort -n,然后按排序顺序获取结果。

    要按awk 的排序顺序获得它,您必须跳出POSIX awk 的领域并使用GNU awk 扩展函数asorti

    gawk '{ sum[$1] += $3 }
          END { n = asorti(sum, map); for (i = 1; i <= n; i++) print map[i], sum[map[i]] }' data  
    

    输出:

    1 0.34
    2 0.92
    3 0.86
    

    【讨论】:

    • 太棒了!这正是我一直在寻找的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 2017-11-26
    • 2012-05-29
    • 1970-01-01
    • 2021-10-14
    • 2021-06-04
    相关资源
    最近更新 更多