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

Posted

技术标签:

【中文标题】bash 一个用于计算 bash 中特定数字行的平均值的衬垫【英文标题】:Bash one liner for calculating the average of a specific row of numbers in bash 【发布时间】:2021-11-06 14:37:31 【问题描述】:

我刚开始学习 bash。

试图弄清楚如何使用 bash 将两行代码转换为一层代码。

第一行代码...

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

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

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

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

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

我如何从这个创建一个单衬?

【问题讨论】:

请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。 您的脚本是 awk,而不是 bash。他们会在任何外壳中做同样的事情。 awk 和 bash 是两种完全不同的工具。 Ed - 因为bashoneliners.com 和onceupon.github.io/Bash-Oneliner,我将这个 Bash 命名为一个班轮。看来这可以称为很多东西。 将弄清楚如何将示例输入和示例结果添加到未来的问题中。 【参考方案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

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

【讨论】:

谢谢,肖恩!当我修改您的解决方案以使 count = -1 时,它给了我正确的答案!有关于如何提高我的单行技能的提示吗? @LockhartTech 你需要-1这很奇怪。 我认为这是因为要平均的值从第三列开始,而不是我错误地指出的第二列。 @LockhartTech 是的,如果您没有适当地调整递增 count 的行以及开始求和的列,那将会把事情搞砸。【参考方案2】:

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

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

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

然后将第3列到最后一列的所有字段相加。

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

【讨论】:

以上是关于bash 一个用于计算 bash 中特定数字行的平均值的衬垫的主要内容,如果未能解决你的问题,请参考以下文章

用于检查特定 php 进程是不是正在运行的 Bash 脚本?

如何在 Bash 中将字符串计算为数字?

一个bash脚本,用于使用bash脚本连接字符串并在同一文件中编辑一行

第9章 Shell基础_Bash的变量

如何计算bash中一列数据中的连续重复次数?

Bash 字符串删除特定字符