awk脚本在一列中添加数字

时间:2013-10-07 15:52:05

标签: awk

如何在for脚本中使用whileawk循环添加(第二列上的数字)?

$1处的数字是随机的并且按递增顺序排列:

  • 第一次迭代中的1到2,
  • 第二次迭代中
  • 1.1到2.1,
  • 第3次迭代中的1.2到2.2,
  • 第4次迭代中的1.3到2.3
  • ......一直到最后

这意味着每次迭代时增量为0.1。

预期产出:

  • 39 for 1st iteration
  • 47 for 2nd iteration ...

输入数据:

1.0  1
1.1  3
1.2  4
1.3  3
1.4  5
1.5  7
1.6  10
2.0  6
2.1  9
2.2  2
2.3  8
2.4  0
3.0  4
3.2  5
4.0  8
4.1  6
5.0  7
6.0  6
7.0  7
8.7  9
9.8  2

1 个答案:

答案 0 :(得分:2)

在这里,我将每个$ 1乘以10以避免problems with imprecise decimal numbers

awk -v max=$(tail -1 data | awk '{print $1*10}') '
    {n = $1 * 10}
    NR==1 {min = n}
    { 
        for (i=min; i<=(max-10); i++) {
            if (i <= n && n <= (i+10)) {
                sum[i, i+10] += $2
            }
        }
    }
    END {
        for (key in sum) {
            split(key, a, SUBSEP)
            printf "[%.1f,%.1f] = %d\n", a[1]/10, a[2]/10, sum[key]
        }
    }
' data | sort -n

输出

[1.0,2.0] = 39
[1.1,2.1] = 47
[1.2,2.2] = 46
[1.3,2.3] = 50
...
[8.6,9.6] = 9
[8.7,9.7] = 9
[8.8,9.8] = 2