首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Awk减去记录

Awk减去记录
EN

Stack Overflow用户
提问于 2011-10-31 04:01:00
回答 3查看 752关注 0票数 1

我有一个类似于下面的数据集,但是要大得多:

代码语言:javascript
运行
复制
5 6 9
2 4 6
4 5 1

我希望能够从当前记录中减去每个记录中的每个字段,然后将它们相加并存储结果。例如,我想从第一行(5-2) + (6-4) + (9-6) = result开始。以及(5-4) + (6-5)和(9-1)。也可以对所有其他行执行此操作,例如,对于第二行(2-4) + (4-5) + (6-1)和(2-5) + (4-6) + (6-9)等。我可以手动执行以下操作:

代码语言:javascript
运行
复制
{
     if (max_nf < NF)
          max_nf = NF
     max_nr = NR
     for (x = 1; x <= NF; x++)
          vector[x, NR] = $x
}

END { result = ((vector[1,1] - vector[1,2]) + (vector[2,1] - vector[2,2]) + (vector[3,1] - vector[3,2]))
}

然而,数据集很大,我想要一个循环来做这件事,但我似乎不能让它工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-31 04:24:38

一个明显的可能性是这个订单上的东西:

代码语言:javascript
运行
复制
BEGIN { getline; fields = NF+1; for (i=1; i<fields; i++) first[i] = $i; }

    { 
      total = 0;
      for (field = 1; field < fields; field++)  
          total += first[field] - $field;
      printf("%d\n", total);
    }

请注意,这不会尝试检测或智能地处理错误输入。

编辑(以适合已编辑的问题):

考虑到您更改了问题的内容,您显然需要将所有数据读取到一个数组中,然后遍历该数组并将记录之间的差异相加。这不再真正适合awk的工作方式,所以我的直接建议是使用其他东西。如果您坚持使用awk,那么基本上可以将所有处理放到BEGIN块中,将所有行读取到一个大数组中,然后遍历它,执行所有的数学运算,然后打印结果。

票数 1
EN

Stack Overflow用户

发布于 2011-10-31 04:26:17

代码语言:javascript
运行
复制
awk '
  BEGIN { getline; split($0,v1) }
  { 
    split($0,v2); 
    result=0; 
    for (i in v1) { 
      result += v1[i]-v2[i];
    }
    print result
  }
'
票数 1
EN

Stack Overflow用户

发布于 2011-10-31 05:59:53

请注意,只使用记录的总和。因此,您可以通过将任务视为两个步骤来简化该任务:

  1. 查找每个record.
  2. Calculate的合计以及合计的差值。

这可能看起来像这样:

代码语言:javascript
运行
复制
cat data | # generate the data in whatever fashion
  awk '{ for (n=1; n<=NF; n++) 
           recsum[NR]+=$n
       } 
       END { 
         for (n=1; n<=NR; n++) 
           for (m=n+1; m<=NR; m++) 
             print n, m, recsum[n]-recsum[m] }'

对于问题中给出的样本数据,这将产生预期的结果:

代码语言:javascript
运行
复制
1 2 8
1 3 10
2 3 2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7947447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档