首页 > 解决方案 > 使用 awk 进行计算,在输出中获得额外的行

问题描述

我正在尝试使用 awk 命令和一些计算打印一个简单的报告。这是输入文件:

1   Syed-Yamin   3   500
2   Ilia-Nika    4   400
3   Mike-Ro      5   300
4   Witold-Ryb   2   200
5   Farhan-F     1   500

在报告中,我想打印每行的第 1 列、第 2 列以及第 3 列和第 4 列相乘的计算结果。另外,我想在底部打印每行所有乘法的总和。我在输出中得到了一些额外的行,并想清理它们。所以最终结果应该是这样的:

1   Syed-Yamin   1500
2   Ilia-Nika    1600
3   Mike-Ro      1500
4   Witold-Ryb   400
5   Farhan-F     500
Total amount = $5500
awk 'BEGIN {total=0;}
{print "$1, $2, ($3 * $4)";}
total=total+($3 * $4)
END {print "Total Amount = $", total;}' input

带有很多额外行的 awk 打印

标签: linuxawk

解决方案


在这里我为你修好了……

$ awk -v OFS='\t' '{$3 *= $4; NF--; total += $3}1
               END {print "","Total Amount =", "$"total}' file | 
 column -ts$'\t'

1  Syed-Yamin      1500
2  Ilia-Nika       1600
3  Mike-Ro         1500
4  Witold-Ryb      400
5  Farhan-F        500
   Total Amount =  $5500

也许更好地格式化这种方式

$ awk '{printf "%d\t%s\t%5d\n",$1,$2,$3*=$4; total+=$3}
   END {print "\tTotal Amount =\t$"total}' file | 
   column -ts$'\t'

1  Syed-Yamin       1500
2  Ilia-Nika        1600
3  Mike-Ro          1500
4  Witold-Ryb        400
5  Farhan-F          500
   Total Amount =  $5500

推荐阅读