0

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

虽然 at 的数字$1是随机的且按递增顺序排列:

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

这意味着每次迭代增加 0.1。

预期输出:

  • 第一次迭代 39
  • 47 第二次迭代...

输入数据:

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
4

1 回答 1

2

在这里,我将每个 $1 乘以 10 以避免十进制数不精确的问题

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
于 2013-10-07T16:12:14.123 回答