免责声明:我是新手。
我一直在寻找无法成功解决我问题的答案。如果有未找到与此相关的帖子,请引导我去看看!
我一直在尝试使用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”等,即输出应如下所示(打印在一个新文件):
12 21 23 24 31 32 36 41 42 49
19 20 21 22 23 24 25 27 32 33
45 46 51 52 60 61 63 64 68 69
我一直在尝试使用awk,但是我一生都无法使用它在每个领域都可以使用(我不想键入一个命令一百次)。
很显然,我是这一切的新手,任何可行的解决方案都会令我感到高兴。不一定要awk。预先感谢您的帮助!
答案 0 :(得分:2)
遵循awk
可能会对您有所帮助。
awk '{for(i=2;i<=NF;i++){$i=$i+$(i-1)}} 1' Input_file
说明:
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.
答案 1 :(得分:1)
可能的Perl解决方案:
perl -lane '$c = 0; print join "\t", map $c += $_, @F'
-n
:遍历所有输入线-a
:将每一行拆分为多个字段并将其放置在@F
-l
:在每个print
之后自动添加换行符-e ...
:程序。每行:
$c
重置为0
@F
的字段开始map
将它们加到$c
中,返回中间结果列表print
新行