Bash 求“1”列中的数字之和;x";前几行

Bash 求“1”列中的数字之和;x";前几行,bash,awk,Bash,Awk,我有一个循环5次的脚本。在每次迭代中,脚本都会向输出文件添加行。在第二次迭代中,输出文件如下所示: #First Total: 10 Sub: 3 Del: 4 Total2:13 #----------# #Second: Total: 15 Sub: 7 Del: 8 Total2:25 #----------# 我想要的是:Del和Total2之间的一行,总和为Total+Sub+Del。所以,我尝试的是在“Del”行打印出来之后,在“Total2”打印出来之前,输入这个命令(见下文)

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

#First
Total: 10
Sub: 3
Del: 4
Total2:13
#----------#
#Second:
Total: 15
Sub: 7
Del: 8
Total2:25
#----------#
我想要的是:Del和Total2之间的一行,总和为Total+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解决方案可能非常好


提前谢谢。

很接近,但是您的
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
#----------#

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

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

我看不出哪个节目能产生你想要的效果。那个
awk
程序只输出一个数字。也许我解释错了。第一个表是在我已经编写的脚本中生成的。但我想在总和上再加一行…:如果我含糊不清地解释了这个问题,很抱歉。好的,如果我在创建了整个输出文件之后运行它,它会正常工作。我的解决方案是,您希望在创建输出的同时添加总和。。。我了解我自己。谢谢哦,我明白了——我想我误解了这个问题。