gpt4 book ai didi

bash - 在一列整数 BASH 中每 5 行相加

转载 作者:行者123 更新时间:2023-12-05 09:18:24 26 4
gpt4 key购买 nike

我正在写一个解析器,必须要写一些花哨的东西。我尽量不使用 python,但此时我可能不得不使用。

给定一个如下所示的 STDOUT:

1
0
2
3
0
0
1
0
0
2
0
3
0
4
0
5
0
2
.
.
.

大约 100,000 行。我需要做的是每 5 个加起来,如下所示:

1 - start
0 |
2 | - 6
3 |
0 - end
0 - start
1 |
0 | - 3
0 |
2 - end
0 - start
3 |
0 | - 7
4 |
0 - end
5
0
2
.
.
.

-|startend,都是可视化的,我正好需要在列列表中:

 6
3
7
.
.
.

我目前有一种方法可以通过使用增量 head -n $itail -n 5 从列表中删除 5 行,然后我使用 paste -sd+ - | bc 将所有值相加。但这太慢了,因为有 100,000 列。

如果有人有任何补充,我将不胜感激。如果需要更多信息,请告诉我。

谢谢

最佳答案

看起来 awk 是一个很自然的工具:

awk '{ sum += $1 } NR % 5 == 0 { print sum; sum = 0 }'

将第 1 列中的值添加到 sum。如果记录号模 5 为 0,则打印总和并将其重置为 0。请注意,如果最后一组记录很短(组中有 1-4 个元素),则不会打印它们的总和。如果要打印短组的总和,请将 END { if (NR % 5 != 0) print sum } 添加到脚本中。

由于这会使用单个命令单次传递数据文件,因此很难击败它。使用 Perl 可能会快一点。我不知道 Python 与 Awk 或 Perl 相比如何。

关于bash - 在一列整数 BASH 中每 5 行相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com