awk对一列进行求和,并在每行输入上打印该总和

Ste*_*eve 23 bash awk printf sed

file.txt看起来像这样:

1 12
2 18
3 45
4 5
5 71
6 96
7 13
8 12
Run Code Online (Sandbox Code Playgroud)

我可以这样总结第二列:

awk '{ sum += $2 } END { print sum }' file.txt

272

我能在每一行打印这笔钱的最好方法是什么?这就是我所期待的:

1 12 272
2 18 272
3 45 272
4 5 272
5 71 272
6 96 272
7 13 272
8 12 272
Run Code Online (Sandbox Code Playgroud)

kev*_*kev 19

一种标准的awk方式.

$ awk 'FNR==NR{sum+=$2;next}; {print $0,sum}' file.txt{,}
1 12 272
2 18 272
3 45 272
4 5 272
5 71 272
6 96 272
7 13 272
8 12 272
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 7

您可以使用:

awk -v xyzzy=$(awk '{sum+=$2}END{print sum}' file.txt)
    '{print $0" "xyzzy}' file.txt
Run Code Online (Sandbox Code Playgroud)

不幸的是,这意味着要两次查看信息,但是,因为你必须在获得总数之前做一次,所以没有真正的解决方法.任何解决方案都将涉及在输出任何内容之前存储信息(无论是在数组中还是返回到文件中).

内部awk计算总数,外部awk指定一个变量,可以与每行一起打印.

将其应用于文件:

a 1
b 2
c 3
d 4
e 5
Run Code Online (Sandbox Code Playgroud)

给你,因为1 + 2 + 3 + 4 + 5等于15:

a 1 15
b 2 15
c 3 15
d 4 15
e 5 15
Run Code Online (Sandbox Code Playgroud)