将" x"列的数字相加以前的行

时间:2014-06-13 16:40:50

标签: bash awk

我有一个循环为5次迭代的脚本。在每次迭代中,脚本都会将行添加到输出文件中。输出文件在第二次迭代中如下所示:

#First
Total: 10
Sub: 3
Del: 4
Total2:13
#----------#
#Second:
Total: 15
Sub: 7
Del: 8
Total2:25
#----------#

我想要的:Del和Total2之间的一条线,总和+ Sub + Del。所以,我试过的是在打印出“Del”线之后输入这个命令(见下文),在打印出“Total2”之前。

awk '!/^#/ {s+=$2} END {print s}' file

它仅适用于第一次迭代。 我想要的输出:

#First
Total: 10
Sub: 3
Del: 4
Sum: 17
Total2:13
#----------#
#Second:
Total: 15
Sub: 7
Del: 8
Sum: 30
Total2:25
#----------#

所以,我想找到一种方法只对previos 3行的第二列的值求和。

我希望我在解释...... awk或bash解决方案可能很棒。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您已关闭,但您的awk程序无法打印出文件的其余部分。这是我掀起的一个简单例子:

$ cat script
/^#/ { s = 0 }                # reset s on lines starting with #
!/^#/ { s += $2 }             # add to s on lines that *don't* start with #
/^Total2/ { print "Sum:", s } # print out sum before printing Total2
{ print $0 }                  # print current line

在输入文件上运行它:

$ awk -f script file 
#First
Total: 10
Sub: 3
Del: 4
Sum: 17
Total2:13
#----------#
#Second:
Total: 15
Sub: 7
Del: 8
Sum: 30
Total2:25
#----------#

答案 1 :(得分:0)

好的,我觉得我有点傻。只需在awk之前添加bash“tail”命令,问题就解决了:

tail -3 prova.txt | awk '!/^#/ {s+=$2} END {print "Sum: "s}'