Bash 用于计算 bash 中特定行数字的平均值的一个衬垫
Bash one liner for calculating the average of a specific row of numbers in bash
我刚开始学习bash。
试图弄清楚如何使用 bash 将双衬里转换为单衬里。
第一行代码...
在 input.txt 的第一列中搜索单词 - KEYWORD。
捕获此 KEYWORD 行中从第 2 列到最后一列的每个数字。
将所有这些数字转储到 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列到最后一列的所有字段求和。
然后打印出所有这些数字的平均值。 (即平均值)。
我刚开始学习bash。
试图弄清楚如何使用 bash 将双衬里转换为单衬里。
第一行代码...
在 input.txt 的第一列中搜索单词 - KEYWORD。
捕获此 KEYWORD 行中从第 2 列到最后一列的每个数字。
将所有这些数字转储到 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列到最后一列的所有字段求和。
然后打印出所有这些数字的平均值。 (即平均值)。