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