-2

我刚开始学习bash。

试图弄清楚如何使用 bash 将两行转换为单行。

第一行代码...

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

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

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

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

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

我如何从中创建一个衬里?

4

2 回答 2

1

就像是

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

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

于 2021-09-10T02:22:48.800 回答
0

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

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

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

然后总结从第 3 列到最后一列的所有字段。

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

于 2021-09-14T18:19:59.863 回答