这是我的档案
air1.txt
fc:75:16:d2:91:a3 -90 targol
78:54:2e:7f:e8:9e -88 DLink
fc:75:16:d2:91:a3 -89 targol
78:54:2e:7f:e8:9e -89 DLink
78:54:2e:7f:e8:9e -88 DLink
78:54:2e:7f:e8:9e -87 DLink
fc:75:16:d2:91:a3 -90 targol
我想计算第三列中每个名字的第二列平均值!这是我的手册!
RSSI=$(awk '{print $3}' air1.txt | sort -u | while read line; do awk < air1.txt '{print $2,$3}' | grep $line | ./rssiMean.sh |cut -d'.' -f1 |awk '{print $line,$1}' ;done)
echo $RSSI
但结果是
-88 -88 -89 -89
为什么我无法获得$line
?!
BTW ./rssiMean.sh计算平均值!
答案 0 :(得分:3)
这应该做:
awk '{a[$3]+=$2;b[$3]++} END {for (i in a) print i,a[i]/b[i]}' air1.txt
DLink -88
targol -89.6667
它总结第3列中每个数据的数字,并将其除以命中数。
答案 1 :(得分:0)
您不能在awk
脚本中使用bash变量。
而是使用awk变量并使用-v
参数
例如:
$var=123
$awk -v awkvar=$var '{print awkvar}'
此处awkvar
是一个创建的awk变量,其值为$var
在您的脚本中进行此更改
RSSI=$(awk '{print $3}' air1.txt | sort -u | while read line; do awk < air1.txt '{print $2,$3}' | grep $line | ./rssiMean.sh |cut -d'.' -f1 |awk -v line=$line '{print line,$1}' ;done)
echo $RSSI
所做的更改是
awk -v line=$line '{print line,$1}
awk varible line
被赋值为bash varibale $line