Unix 计算每行中字段的累积和
免责声明:我是新手 我一直在到处寻找我问题的答案,但没有成功。如果有关于这方面的帖子我还没有找到,请让我参考 我一直在尝试使用awk来计算一个相当大的数据文件中每行中每个字段的累积总和。任何帮助都将不胜感激 我的文件包含数十万行,其中行的长度(字段数)不同,最多可以有100个字段(即最多100列)。输入看起来是这样的(但实际数字要大得多),并且以制表符分隔:Unix 计算每行中字段的累积和,unix,awk,Unix,Awk,免责声明:我是新手 我一直在到处寻找我问题的答案,但没有成功。如果有关于这方面的帖子我还没有找到,请让我参考 我一直在尝试使用awk来计算一个相当大的数据文件中每行中每个字段的累积总和。任何帮助都将不胜感激 我的文件包含数十万行,其中行的长度(字段数)不同,最多可以有100个字段(即最多100列)。输入看起来是这样的(但实际数字要大得多),并且以制表符分隔: 12 9 2 1 7 1 4 5 1 7 19 1 1 1 1 1 1 2 5 1 45 1 5 1 8 1 2 1 4 1 我希望输出
12 9 2 1 7 1 4 5 1 7
19 1 1 1 1 1 1 2 5 1
45 1 5 1 8 1 2 1 4 1
我希望输出的格式为“新字段2=字段1+字段2”和“新字段3=字段1+字段2+字段3”等,即输出应如下所示(打印在新文件中):
我一直在尝试使用awk,但我一生都无法让它在每个领域都工作(我不想键入一百次命令)
显然,我对这一切都是新手,任何有效的解决方案都会让我高兴。不必太尴尬。提前感谢您的帮助 下面的
awk
可能会对您有所帮助
awk '{for(i=2;i<=NF;i++){$i=$i+$(i-1)}} 1' Input_file
awk'{for(i=2;i一种可能的Perl解决方案:
perl -lane '$c = 0; print join "\t", map $c += $_, @F'
-n
:在所有输入行上循环
-a
:将每行拆分为字段,并将其放入@F
-l
:在每次打印后自动添加换行符
-e…
:程序。对于每行:
- 将
$c
重置为0
- 从
@F
- 使用
map
将它们添加到$c
中,返回中间结果列表
- 在每对中间和之间放一个制表符
打印
新行
很有魅力,你是救世主!非常感谢你。如果我敢问,你能为我解释一下你的命令吗?如果你没有时间,我当然仍然非常感谢。@JensIngvarsson,我的荣幸。也看一次这个链接,如果你回答了这个问题,你应该做什么@JensIngvarsson,请检查我的解释,t补充道现在就开始吧。
awk '{
for(i=2;i<=NF;i++){ ##Starting a for loop from value of 2 to till value of NF.
$i=$i+$(i-1)}} ##Adding value of current field with previous field here and assigning to itself.
1 ##Mentioning 1 to print the current line with edited field values.
' Input_file ##Mentioning Input_file name here.
perl -lane '$c = 0; print join "\t", map $c += $_, @F'