Bash 是否逐行获取文件中选定单元格的平均值?

Bash 是否逐行获取文件中选定单元格的平均值?,bash,shell,average,Bash,Shell,Average,我有一个包含多个列的文件。我想选择几行,得到一行中所选单元格的平均值,并将整个平均值作为列输出 例如: Month Low.temp Max.temp Pressure Wind Rain JAN 17 36 120 5 0 FEB 10 34 110 15 3 MA

我有一个包含多个列的文件。我想选择几行,得到一行中所选单元格的平均值,并将整个平均值作为列输出

例如:

Month    Low.temp     Max.temp     Pressure      Wind       Rain 
JAN       17             36           120          5          0
FEB       10             34           110          15         3  
MAR       13             30           115          25         5
APR       14             33           105          10         4
.......
如何获得列中的平均温度(平均温度)和湿度(Hum)

Avg.temp = (Low.temp+Max.temp)/2

Hum = Wind * Rain
获取平均温度

Month    Low.temp     Max.temp     Pressure      Wind       Rain   Avg.temp      Hum
JAN       17             36           120          5          0      26.5          0
FEB       10             34           110          15         3       22          45  
MAR       13             30           115          25         5      21.5        125
APR       14             33           105          10         4      23.5         40
.......

我不想在excel中做这件事。是否有任何简单的shell命令来执行此操作?

我将使用
awk
如下:

awk 'NR==1 {print $0, "Avg.temp", "Hum"; next} {$(NF+1)=($2+$3)/2; $(NF+1)=$5*$6}1' file
或:

这包括进行计算并将其附加到原始值

让我们看看它的实际操作,通过管道连接到
列-t
以获得良好的输出:

$ awk 'NR==1 {print $0, "Avg.temp", "Hum"; next} {$(NF+1)=($2+$3)/2; $(NF+1)=$5*$6}1' file | column -t
Month  Low.temp  Max.temp  Pressure  Wind  Rain  Avg.temp  Hum
JAN    17        36        120       5     0     26.5      0
FEB    10        34        110       15    3     22        45
MAR    13        30        115       25    5     21.5      125
APR    14        33        105       10    4     23.5      40

谢谢你的意见。。awk-v OFS='\t''NR==1{print$0,“Avg.temp”,“Hum”;下一个}{print$0,($2+$3)/2,($5*$6)*2}文件。。。。。。。。。。。。。。。。读到这篇文章我很高兴。@user2793614,它解决了你的问题吗?既然你是新来的,如果你的问题已经解决了,请别忘了把答案标为“接受”。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你是否有任何疑问@fedorqui:
$(NF+1)=(2+3)/2$(NF+2)=$5*$6
应该是
$(NF+1)=($2+$3)/2$(NF+1)=$5*$6
。第一个赋值增加
NF
;正如您所写的,您最终会得到一个空白字段(这会在打印输出中产生额外的空白)。
$ awk 'NR==1 {print $0, "Avg.temp", "Hum"; next} {$(NF+1)=($2+$3)/2; $(NF+1)=$5*$6}1' file | column -t
Month  Low.temp  Max.temp  Pressure  Wind  Rain  Avg.temp  Hum
JAN    17        36        120       5     0     26.5      0
FEB    10        34        110       15    3     22        45
MAR    13        30        115       25    5     21.5      125
APR    14        33        105       10    4     23.5      40