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<=NF;n++)sum+=$n;print sum/(NF-2)' input.txt
此代码在输入文件中搜索包含“KEYWORD”的行。
然后将第3列到最后一列的所有字段相加。
然后打印出所有这些数字的平均值。 (即平均值)。
【讨论】:
以上是关于bash 一个用于计算 bash 中特定数字行的平均值的衬垫的主要内容,如果未能解决你的问题,请参考以下文章
用于检查特定 php 进程是不是正在运行的 Bash 脚本?