Unix 计算每行中字段的累积和

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 我希望输出

免责声明:我是新手

我一直在到处寻找我问题的答案,但没有成功。如果有关于这方面的帖子我还没有找到,请让我参考

我一直在尝试使用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
我希望输出的格式为“新字段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'