Bash 用于计算 bash 中特定行数字的平均值的一个衬垫

Bash one liner for calculating the average of a specific row of numbers in bash

我刚开始学习bash。

试图弄清楚如何使用 bash 将双衬里转换为单衬里。

第一行代码...

  1. 在 input.txt 的第一列中搜索单词 - KEYWORD。

  2. 捕获此 KEYWORD 行中从第 2 列到最后一列的每个数字。

  3. 将所有这些数字转储到 values.txt 文件中,并将每个数字放在一个新行上。

第二行代码计算值 txt 第一列中所有数字的平均值,并打印出此值。

awk '{if(=="KEYWORD") for(i=2;i<=NF;i++) print $i}' input.txt > values.txt
awk 'BEGIN{sum=0; counter=0}{sum+=; counter+=1}END{print sum/counter}' values.txt 

如何从中创建一个衬垫?

类似

awk '
  BEGIN { count = sum = 0 }
   == "KEYWORD" {
    for (n = 2; n <= NF; n++) sum += $n
    count += NF - 1
  }
  END { print sum/count }' input.txt

只需跟踪第一次(也是唯一一次)遍历文件时数字的总和和总数,然后在最后对它们进行平均,而不是为每个匹配行打印一个值。

在与几个人一起审查这个问题并学习了一些新的 bash/awk 快捷方式之后,下面的代码似乎是最短的答案。

awk '/KEYWORD/{for(n=3;n<=NF;n++)sum+=$n;print sum/(NF-2)}' input.txt

此代码在输入文件中搜索包含“KEYWORD”的行。

然后对第3列到最后一列的所有字段求和。

然后打印出所有这些数字的平均值。 (即平均值)。