我有一个循环为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解决方案可能很棒。
提前致谢。
答案 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}'