awk - 尝试使用 awk 制作报告

标签 awk

我有一份与以下内容相同的报告:

gold     1      1986    USA                 Americal Eagle
gold     1      1908    Austria-Hungary     Franz Josef 100 Korona
silver  10      1981    USA             Ingot
gold     1      1984    Switzerland         ingot
gold     1      1979    RSA                 Krugerrand
gold     0.5    1981    RSA                 Krugerrand
gold     0.1    1986    PRC                 Panda
silver   1      1986    USA                 Liberty dollar
gold     0.25   1986    USA                 Liberty 5-collar piece
silver   0.5    1986    USA                 Liberty 50-cent piece
silver   1      1987    USA                 Constitution dollar
gold     0.25   1987    USA                 Constitution 5-dollar piece
gold     1      1988    Canada              Maple Leaf

我想提取如下报告:

Gold pieces:                    9
Weight of gold pieces:           6.10
Value of gold pieces:       9729.50

这是我编写的代码:

BEGIN{}
$1 ~/^gold$/
{
  goldWeight += $2
  ++goldCounter
}
END{
  printf "Gold Pieces:\t\t%d\n" , goldCounter
  printf "Weight of gold pieces:\t\t%1.2f\n" , goldWeight
  printf "Value of gold pieces:\t\t%1.2f\n" , goldWeight*1771.00
}

该代码不起作用。我的问题出在哪里?

最佳答案

您需要模式后面的第一个括号

$1 ~/^gold$/ {
  goldWeight += $2
  ++goldCounter
}

然后大括号中的位适用于该模式。否则它适用于每一行。

关于awk - 尝试使用 awk 制作报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12815629/

相关文章:

bash - 如何通过变量 bash 过滤行

bash - 如何让 awk 忽略双引号内的字段定界符?

regex - 如何删除冗余字段并合并结果行

linux - 使用awk从多个条目中保留一个具有mex值的条目

bash - 将多个文件移动到新目录保留路径

linux - 使用打印两个不同的文件字段

bash - 如何在 unix 终端的唯一顺序列表(每行一个)中找到丢失的整数?

linux - 一段时间内数据流的唯一计数和排序

Perl,根据第二行中的值更改第一行中的值,

linux - 匹配一个模式,插入模式,直到下一次匹配